{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "id 为贷款清单分配的唯一信用证标识\n",
    "loanAmnt 贷款金额\n",
    "term 贷款期限（year）\n",
    "interestRate 贷款利率\n",
    "installment 分期付款金额\n",
    "grade 贷款等级\n",
    "subGrade 贷款等级之子级\n",
    "employmentTitle 就业职称\n",
    "employmentLength 就业年限（年）\n",
    "homeOwnership 借款人在登记时提供的房屋所有权状况\n",
    "annualIncome 年收入\n",
    "verificationStatus 验证状态\n",
    "issueDate 贷款发放的月份\n",
    "purpose 借款人在贷款申请时的贷款用途类别\n",
    "postCode 借款人在贷款申请中提供的邮政编码的前3位数字\n",
    "regionCode 地区编码\n",
    "dti 债务收入比\n",
    "delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数\n",
    "ficoRangeLow 借款人在贷款发放时的fico所属的下限范围\n",
    "ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围\n",
    "openAcc 借款人信用档案中未结信用额度的数量\n",
    "pubRec 贬损公共记录的数量\n",
    "pubRecBankruptcies 公开记录清除的数量\n",
    "revolBal 信贷周转余额合计\n",
    "revolUtil 循环额度利用率，或借款人使用的相对于所有可用循环信贷的信贷金额\n",
    "totalAcc 借款人信用档案中当前的信用额度总数\n",
    "initialListStatus 贷款的初始列表状态\n",
    "applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请\n",
    "earliesCreditLine 借款人最早报告的信用额度开立的月份\n",
    "title 借款人提供的贷款名称\n",
    "policyCode 公开可用的策略代码=1新产品不公开可用的策略代码=2\n",
    "n系列匿名特征 匿名特征n0-n14，为一些贷款人行为计数特征的处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f43a123af5f05ee2"
  },
  {
   "cell_type": "code",
   "execution_count": 334,
   "id": "42d79606b0abbbbe",
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:28.818605Z",
     "start_time": "2024-09-26T13:41:26.815368400Z"
    }
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "\n",
    "train = pd.read_csv('train.csv')\n",
    "testA = pd.read_csv('testA.csv')"
   ]
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "   id  loanAmnt  term  interestRate  installment grade subGrade  \\\n0   0   35000.0     5         19.52       917.97     E       E2   \n1   1   18000.0     5         18.49       461.90     D       D2   \n2   2   12000.0     5         16.99       298.17     D       D3   \n\n   employmentTitle employmentLength  homeOwnership  ...   n5    n6   n7    n8  \\\n0            320.0          2 years              2  ...  9.0   8.0  4.0  12.0   \n1         219843.0          5 years              0  ...  NaN   NaN  NaN   NaN   \n2          31698.0          8 years              0  ...  0.0  21.0  4.0   5.0   \n\n    n9   n10  n11  n12  n13  n14  \n0  2.0   7.0  0.0  0.0  0.0  2.0  \n1  NaN  13.0  NaN  NaN  NaN  NaN  \n2  3.0  11.0  0.0  0.0  0.0  4.0  \n\n[3 rows x 47 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>loanAmnt</th>\n      <th>term</th>\n      <th>interestRate</th>\n      <th>installment</th>\n      <th>grade</th>\n      <th>subGrade</th>\n      <th>employmentTitle</th>\n      <th>employmentLength</th>\n      <th>homeOwnership</th>\n      <th>...</th>\n      <th>n5</th>\n      <th>n6</th>\n      <th>n7</th>\n      <th>n8</th>\n      <th>n9</th>\n      <th>n10</th>\n      <th>n11</th>\n      <th>n12</th>\n      <th>n13</th>\n      <th>n14</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>35000.0</td>\n      <td>5</td>\n      <td>19.52</td>\n      <td>917.97</td>\n      <td>E</td>\n      <td>E2</td>\n      <td>320.0</td>\n      <td>2 years</td>\n      <td>2</td>\n      <td>...</td>\n      <td>9.0</td>\n      <td>8.0</td>\n      <td>4.0</td>\n      <td>12.0</td>\n      <td>2.0</td>\n      <td>7.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>2.0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>18000.0</td>\n      <td>5</td>\n      <td>18.49</td>\n      <td>461.90</td>\n      <td>D</td>\n      <td>D2</td>\n      <td>219843.0</td>\n      <td>5 years</td>\n      <td>0</td>\n      <td>...</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>13.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>12000.0</td>\n      <td>5</td>\n      <td>16.99</td>\n      <td>298.17</td>\n      <td>D</td>\n      <td>D3</td>\n      <td>31698.0</td>\n      <td>8 years</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0.0</td>\n      <td>21.0</td>\n      <td>4.0</td>\n      <td>5.0</td>\n      <td>3.0</td>\n      <td>11.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>4.0</td>\n    </tr>\n  </tbody>\n</table>\n<p>3 rows × 47 columns</p>\n</div>"
     },
     "execution_count": 335,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(3)"
   ],
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:28.831625900Z",
     "start_time": "2024-09-26T13:41:28.818605Z"
    }
   },
   "id": "initial_id",
   "execution_count": 335
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "       id  loanAmnt  term  interestRate  installment grade subGrade  \\\n0  800000   14000.0     3         10.99       458.28     B       B3   \n1  800001   20000.0     5         14.65       472.14     C       C5   \n2  800002   12000.0     3         19.99       445.91     D       D4   \n\n   employmentTitle employmentLength  homeOwnership  ...   n5    n6    n7  \\\n0           7027.0        10+ years              0  ...  8.0   4.0  15.0   \n1          60426.0        10+ years              0  ...  1.0   3.0   3.0   \n2          23547.0          2 years              1  ...  1.0  36.0   5.0   \n\n     n8   n9   n10  n11  n12  n13  n14  \n0  19.0  6.0  17.0  0.0  0.0  1.0  3.0  \n1   9.0  3.0   5.0  0.0  0.0  2.0  2.0  \n2   6.0  4.0  12.0  0.0  0.0  0.0  7.0  \n\n[3 rows x 46 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>loanAmnt</th>\n      <th>term</th>\n      <th>interestRate</th>\n      <th>installment</th>\n      <th>grade</th>\n      <th>subGrade</th>\n      <th>employmentTitle</th>\n      <th>employmentLength</th>\n      <th>homeOwnership</th>\n      <th>...</th>\n      <th>n5</th>\n      <th>n6</th>\n      <th>n7</th>\n      <th>n8</th>\n      <th>n9</th>\n      <th>n10</th>\n      <th>n11</th>\n      <th>n12</th>\n      <th>n13</th>\n      <th>n14</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>800000</td>\n      <td>14000.0</td>\n      <td>3</td>\n      <td>10.99</td>\n      <td>458.28</td>\n      <td>B</td>\n      <td>B3</td>\n      <td>7027.0</td>\n      <td>10+ years</td>\n      <td>0</td>\n      <td>...</td>\n      <td>8.0</td>\n      <td>4.0</td>\n      <td>15.0</td>\n      <td>19.0</td>\n      <td>6.0</td>\n      <td>17.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>3.0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>800001</td>\n      <td>20000.0</td>\n      <td>5</td>\n      <td>14.65</td>\n      <td>472.14</td>\n      <td>C</td>\n      <td>C5</td>\n      <td>60426.0</td>\n      <td>10+ years</td>\n      <td>0</td>\n      <td>...</td>\n      <td>1.0</td>\n      <td>3.0</td>\n      <td>3.0</td>\n      <td>9.0</td>\n      <td>3.0</td>\n      <td>5.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>2.0</td>\n      <td>2.0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>800002</td>\n      <td>12000.0</td>\n      <td>3</td>\n      <td>19.99</td>\n      <td>445.91</td>\n      <td>D</td>\n      <td>D4</td>\n      <td>23547.0</td>\n      <td>2 years</td>\n      <td>1</td>\n      <td>...</td>\n      <td>1.0</td>\n      <td>36.0</td>\n      <td>5.0</td>\n      <td>6.0</td>\n      <td>4.0</td>\n      <td>12.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>7.0</td>\n    </tr>\n  </tbody>\n</table>\n<p>3 rows × 46 columns</p>\n</div>"
     },
     "execution_count": 336,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "testA.head(3)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:28.849470100Z",
     "start_time": "2024-09-26T13:41:28.830574400Z"
    }
   },
   "id": "60a1e84a3db7ea06",
   "execution_count": 336
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 800000 entries, 0 to 799999\n",
      "Data columns (total 47 columns):\n",
      " #   Column              Non-Null Count   Dtype  \n",
      "---  ------              --------------   -----  \n",
      " 0   id                  800000 non-null  int64  \n",
      " 1   loanAmnt            800000 non-null  float64\n",
      " 2   term                800000 non-null  int64  \n",
      " 3   interestRate        800000 non-null  float64\n",
      " 4   installment         800000 non-null  float64\n",
      " 5   grade               800000 non-null  object \n",
      " 6   subGrade            800000 non-null  object \n",
      " 7   employmentTitle     799999 non-null  float64\n",
      " 8   employmentLength    753201 non-null  object \n",
      " 9   homeOwnership       800000 non-null  int64  \n",
      " 10  annualIncome        800000 non-null  float64\n",
      " 11  verificationStatus  800000 non-null  int64  \n",
      " 12  issueDate           800000 non-null  object \n",
      " 13  isDefault           800000 non-null  int64  \n",
      " 14  purpose             800000 non-null  int64  \n",
      " 15  postCode            799999 non-null  float64\n",
      " 16  regionCode          800000 non-null  int64  \n",
      " 17  dti                 799761 non-null  float64\n",
      " 18  delinquency_2years  800000 non-null  float64\n",
      " 19  ficoRangeLow        800000 non-null  float64\n",
      " 20  ficoRangeHigh       800000 non-null  float64\n",
      " 21  openAcc             800000 non-null  float64\n",
      " 22  pubRec              800000 non-null  float64\n",
      " 23  pubRecBankruptcies  799595 non-null  float64\n",
      " 24  revolBal            800000 non-null  float64\n",
      " 25  revolUtil           799469 non-null  float64\n",
      " 26  totalAcc            800000 non-null  float64\n",
      " 27  initialListStatus   800000 non-null  int64  \n",
      " 28  applicationType     800000 non-null  int64  \n",
      " 29  earliesCreditLine   800000 non-null  object \n",
      " 30  title               799999 non-null  float64\n",
      " 31  policyCode          800000 non-null  float64\n",
      " 32  n0                  759730 non-null  float64\n",
      " 33  n1                  759730 non-null  float64\n",
      " 34  n2                  759730 non-null  float64\n",
      " 35  n3                  759730 non-null  float64\n",
      " 36  n4                  766761 non-null  float64\n",
      " 37  n5                  759730 non-null  float64\n",
      " 38  n6                  759730 non-null  float64\n",
      " 39  n7                  759730 non-null  float64\n",
      " 40  n8                  759729 non-null  float64\n",
      " 41  n9                  759730 non-null  float64\n",
      " 42  n10                 766761 non-null  float64\n",
      " 43  n11                 730248 non-null  float64\n",
      " 44  n12                 759730 non-null  float64\n",
      " 45  n13                 759730 non-null  float64\n",
      " 46  n14                 759730 non-null  float64\n",
      "dtypes: float64(33), int64(9), object(5)\n",
      "memory usage: 286.9+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:28.988621900Z",
     "start_time": "2024-09-26T13:41:28.842137200Z"
    }
   },
   "id": "69840ec0c3bf6004",
   "execution_count": 337
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 200000 entries, 0 to 199999\n",
      "Data columns (total 46 columns):\n",
      " #   Column              Non-Null Count   Dtype  \n",
      "---  ------              --------------   -----  \n",
      " 0   id                  200000 non-null  int64  \n",
      " 1   loanAmnt            200000 non-null  float64\n",
      " 2   term                200000 non-null  int64  \n",
      " 3   interestRate        200000 non-null  float64\n",
      " 4   installment         200000 non-null  float64\n",
      " 5   grade               200000 non-null  object \n",
      " 6   subGrade            200000 non-null  object \n",
      " 7   employmentTitle     200000 non-null  float64\n",
      " 8   employmentLength    188258 non-null  object \n",
      " 9   homeOwnership       200000 non-null  int64  \n",
      " 10  annualIncome        200000 non-null  float64\n",
      " 11  verificationStatus  200000 non-null  int64  \n",
      " 12  issueDate           200000 non-null  object \n",
      " 13  purpose             200000 non-null  int64  \n",
      " 14  postCode            200000 non-null  float64\n",
      " 15  regionCode          200000 non-null  int64  \n",
      " 16  dti                 199939 non-null  float64\n",
      " 17  delinquency_2years  200000 non-null  float64\n",
      " 18  ficoRangeLow        200000 non-null  float64\n",
      " 19  ficoRangeHigh       200000 non-null  float64\n",
      " 20  openAcc             200000 non-null  float64\n",
      " 21  pubRec              200000 non-null  float64\n",
      " 22  pubRecBankruptcies  199884 non-null  float64\n",
      " 23  revolBal            200000 non-null  float64\n",
      " 24  revolUtil           199873 non-null  float64\n",
      " 25  totalAcc            200000 non-null  float64\n",
      " 26  initialListStatus   200000 non-null  int64  \n",
      " 27  applicationType     200000 non-null  int64  \n",
      " 28  earliesCreditLine   200000 non-null  object \n",
      " 29  title               200000 non-null  float64\n",
      " 30  policyCode          200000 non-null  float64\n",
      " 31  n0                  189889 non-null  float64\n",
      " 32  n1                  189889 non-null  float64\n",
      " 33  n2                  189889 non-null  float64\n",
      " 34  n3                  189889 non-null  float64\n",
      " 35  n4                  191606 non-null  float64\n",
      " 36  n5                  189889 non-null  float64\n",
      " 37  n6                  189889 non-null  float64\n",
      " 38  n7                  189889 non-null  float64\n",
      " 39  n8                  189889 non-null  float64\n",
      " 40  n9                  189889 non-null  float64\n",
      " 41  n10                 191606 non-null  float64\n",
      " 42  n11                 182425 non-null  float64\n",
      " 43  n12                 189889 non-null  float64\n",
      " 44  n13                 189889 non-null  float64\n",
      " 45  n14                 189889 non-null  float64\n",
      "dtypes: float64(33), int64(8), object(5)\n",
      "memory usage: 70.2+ MB\n"
     ]
    }
   ],
   "source": [
    "testA.info()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:29.046876600Z",
     "start_time": "2024-09-26T13:41:28.983917400Z"
    }
   },
   "id": "532087c342fcb715",
   "execution_count": 338
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                        0\nloanAmnt                  0\nterm                      0\ninterestRate              0\ninstallment               0\ngrade                     0\nsubGrade                  0\nemploymentTitle           1\nemploymentLength      46799\nhomeOwnership             0\nannualIncome              0\nverificationStatus        0\nissueDate                 0\nisDefault                 0\npurpose                   0\npostCode                  1\nregionCode                0\ndti                     239\ndelinquency_2years        0\nficoRangeLow              0\nficoRangeHigh             0\nopenAcc                   0\npubRec                    0\npubRecBankruptcies      405\nrevolBal                  0\nrevolUtil               531\ntotalAcc                  0\ninitialListStatus         0\napplicationType           0\nearliesCreditLine         0\ntitle                     1\npolicyCode                0\nn0                    40270\nn1                    40270\nn2                    40270\nn3                    40270\nn4                    33239\nn5                    40270\nn6                    40270\nn7                    40270\nn8                    40271\nn9                    40270\nn10                   33239\nn11                   69752\nn12                   40270\nn13                   40270\nn14                   40270\ndtype: int64"
     },
     "execution_count": 339,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:29.162905600Z",
     "start_time": "2024-09-26T13:41:29.025595500Z"
    }
   },
   "id": "a798751048f915ce",
   "execution_count": 339
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                        0\nloanAmnt                  0\nterm                      0\ninterestRate              0\ninstallment               0\ngrade                     0\nsubGrade                  0\nemploymentTitle           0\nemploymentLength      11742\nhomeOwnership             0\nannualIncome              0\nverificationStatus        0\nissueDate                 0\npurpose                   0\npostCode                  0\nregionCode                0\ndti                      61\ndelinquency_2years        0\nficoRangeLow              0\nficoRangeHigh             0\nopenAcc                   0\npubRec                    0\npubRecBankruptcies      116\nrevolBal                  0\nrevolUtil               127\ntotalAcc                  0\ninitialListStatus         0\napplicationType           0\nearliesCreditLine         0\ntitle                     0\npolicyCode                0\nn0                    10111\nn1                    10111\nn2                    10111\nn3                    10111\nn4                     8394\nn5                    10111\nn6                    10111\nn7                    10111\nn8                    10111\nn9                    10111\nn10                    8394\nn11                   17575\nn12                   10111\nn13                   10111\nn14                   10111\ndtype: int64"
     },
     "execution_count": 340,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "testA.isnull().sum()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:29.193804500Z",
     "start_time": "2024-09-26T13:41:29.154991600Z"
    }
   },
   "id": "fd7cec7205ada205",
   "execution_count": 340
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(800000, 47)\n",
      "(200000, 46)\n"
     ]
    }
   ],
   "source": [
    "print(train.shape)\n",
    "print(testA.shape)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:29.198912200Z",
     "start_time": "2024-09-26T13:41:29.191866800Z"
    }
   },
   "id": "ff24c9ee928b9d1b",
   "execution_count": 341
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "                  id       loanAmnt           term   interestRate  \\\ncount  800000.000000  800000.000000  800000.000000  800000.000000   \nmean   399999.500000   14416.818875       3.482745      13.238391   \nstd    230940.252015    8716.086178       0.855832       4.765757   \nmin         0.000000     500.000000       3.000000       5.310000   \n25%    199999.750000    8000.000000       3.000000       9.750000   \n50%    399999.500000   12000.000000       3.000000      12.740000   \n75%    599999.250000   20000.000000       3.000000      15.990000   \nmax    799999.000000   40000.000000       5.000000      30.990000   \n\n         installment  employmentTitle  homeOwnership  annualIncome  \\\ncount  800000.000000    799999.000000  800000.000000  8.000000e+05   \nmean      437.947723     72005.351714       0.614213  7.613391e+04   \nstd       261.460393    106585.640204       0.675749  6.894751e+04   \nmin        15.690000         0.000000       0.000000  0.000000e+00   \n25%       248.450000       427.000000       0.000000  4.560000e+04   \n50%       375.135000      7755.000000       1.000000  6.500000e+04   \n75%       580.710000    117663.500000       1.000000  9.000000e+04   \nmax      1715.420000    378351.000000       5.000000  1.099920e+07   \n\n       verificationStatus      isDefault  ...             n5             n6  \\\ncount       800000.000000  800000.000000  ...  759730.000000  759730.000000   \nmean             1.009683       0.199513  ...       8.107937       8.575994   \nstd              0.782716       0.399634  ...       4.799210       7.400536   \nmin              0.000000       0.000000  ...       0.000000       0.000000   \n25%              0.000000       0.000000  ...       5.000000       4.000000   \n50%              1.000000       0.000000  ...       7.000000       7.000000   \n75%              2.000000       0.000000  ...      11.000000      11.000000   \nmax              2.000000       1.000000  ...      70.000000     132.000000   \n\n                  n7             n8             n9            n10  \\\ncount  759730.000000  759729.000000  759730.000000  766761.000000   \nmean        8.282953      14.622488       5.592345      11.643896   \nstd         4.561689       8.124610       3.216184       5.484104   \nmin         0.000000       1.000000       0.000000       0.000000   \n25%         5.000000       9.000000       3.000000       8.000000   \n50%         7.000000      13.000000       5.000000      11.000000   \n75%        10.000000      19.000000       7.000000      14.000000   \nmax        79.000000     128.000000      45.000000      82.000000   \n\n                 n11            n12            n13            n14  \ncount  730248.000000  759730.000000  759730.000000  759730.000000  \nmean        0.000815       0.003384       0.089366       2.178606  \nstd         0.030075       0.062041       0.509069       1.844377  \nmin         0.000000       0.000000       0.000000       0.000000  \n25%         0.000000       0.000000       0.000000       1.000000  \n50%         0.000000       0.000000       0.000000       2.000000  \n75%         0.000000       0.000000       0.000000       3.000000  \nmax         4.000000       4.000000      39.000000      30.000000  \n\n[8 rows x 42 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>loanAmnt</th>\n      <th>term</th>\n      <th>interestRate</th>\n      <th>installment</th>\n      <th>employmentTitle</th>\n      <th>homeOwnership</th>\n      <th>annualIncome</th>\n      <th>verificationStatus</th>\n      <th>isDefault</th>\n      <th>...</th>\n      <th>n5</th>\n      <th>n6</th>\n      <th>n7</th>\n      <th>n8</th>\n      <th>n9</th>\n      <th>n10</th>\n      <th>n11</th>\n      <th>n12</th>\n      <th>n13</th>\n      <th>n14</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>800000.000000</td>\n      <td>800000.000000</td>\n      <td>800000.000000</td>\n      <td>800000.000000</td>\n      <td>800000.000000</td>\n      <td>799999.000000</td>\n      <td>800000.000000</td>\n      <td>8.000000e+05</td>\n      <td>800000.000000</td>\n      <td>800000.000000</td>\n      <td>...</td>\n      <td>759730.000000</td>\n      <td>759730.000000</td>\n      <td>759730.000000</td>\n      <td>759729.000000</td>\n      <td>759730.000000</td>\n      <td>766761.000000</td>\n      <td>730248.000000</td>\n      <td>759730.000000</td>\n      <td>759730.000000</td>\n      <td>759730.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>399999.500000</td>\n      <td>14416.818875</td>\n      <td>3.482745</td>\n      <td>13.238391</td>\n      <td>437.947723</td>\n      <td>72005.351714</td>\n      <td>0.614213</td>\n      <td>7.613391e+04</td>\n      <td>1.009683</td>\n      <td>0.199513</td>\n      <td>...</td>\n      <td>8.107937</td>\n      <td>8.575994</td>\n      <td>8.282953</td>\n      <td>14.622488</td>\n      <td>5.592345</td>\n      <td>11.643896</td>\n      <td>0.000815</td>\n      <td>0.003384</td>\n      <td>0.089366</td>\n      <td>2.178606</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>230940.252015</td>\n      <td>8716.086178</td>\n      <td>0.855832</td>\n      <td>4.765757</td>\n      <td>261.460393</td>\n      <td>106585.640204</td>\n      <td>0.675749</td>\n      <td>6.894751e+04</td>\n      <td>0.782716</td>\n      <td>0.399634</td>\n      <td>...</td>\n      <td>4.799210</td>\n      <td>7.400536</td>\n      <td>4.561689</td>\n      <td>8.124610</td>\n      <td>3.216184</td>\n      <td>5.484104</td>\n      <td>0.030075</td>\n      <td>0.062041</td>\n      <td>0.509069</td>\n      <td>1.844377</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>0.000000</td>\n      <td>500.000000</td>\n      <td>3.000000</td>\n      <td>5.310000</td>\n      <td>15.690000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000e+00</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>1.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>199999.750000</td>\n      <td>8000.000000</td>\n      <td>3.000000</td>\n      <td>9.750000</td>\n      <td>248.450000</td>\n      <td>427.000000</td>\n      <td>0.000000</td>\n      <td>4.560000e+04</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>5.000000</td>\n      <td>4.000000</td>\n      <td>5.000000</td>\n      <td>9.000000</td>\n      <td>3.000000</td>\n      <td>8.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>1.000000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>399999.500000</td>\n      <td>12000.000000</td>\n      <td>3.000000</td>\n      <td>12.740000</td>\n      <td>375.135000</td>\n      <td>7755.000000</td>\n      <td>1.000000</td>\n      <td>6.500000e+04</td>\n      <td>1.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>7.000000</td>\n      <td>7.000000</td>\n      <td>7.000000</td>\n      <td>13.000000</td>\n      <td>5.000000</td>\n      <td>11.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>2.000000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>599999.250000</td>\n      <td>20000.000000</td>\n      <td>3.000000</td>\n      <td>15.990000</td>\n      <td>580.710000</td>\n      <td>117663.500000</td>\n      <td>1.000000</td>\n      <td>9.000000e+04</td>\n      <td>2.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>11.000000</td>\n      <td>11.000000</td>\n      <td>10.000000</td>\n      <td>19.000000</td>\n      <td>7.000000</td>\n      <td>14.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>3.000000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>799999.000000</td>\n      <td>40000.000000</td>\n      <td>5.000000</td>\n      <td>30.990000</td>\n      <td>1715.420000</td>\n      <td>378351.000000</td>\n      <td>5.000000</td>\n      <td>1.099920e+07</td>\n      <td>2.000000</td>\n      <td>1.000000</td>\n      <td>...</td>\n      <td>70.000000</td>\n      <td>132.000000</td>\n      <td>79.000000</td>\n      <td>128.000000</td>\n      <td>45.000000</td>\n      <td>82.000000</td>\n      <td>4.000000</td>\n      <td>4.000000</td>\n      <td>39.000000</td>\n      <td>30.000000</td>\n    </tr>\n  </tbody>\n</table>\n<p>8 rows × 42 columns</p>\n</div>"
     },
     "execution_count": 342,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:29.982860400Z",
     "start_time": "2024-09-26T13:41:29.195439600Z"
    }
   },
   "id": "8228865d2a1b219c",
   "execution_count": 342
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "                  id       loanAmnt           term   interestRate  \\\ncount  200000.000000  200000.000000  200000.000000  200000.000000   \nmean   899999.500000   14436.954125       3.481690      13.244800   \nstd     57735.171256    8737.430326       0.855195       4.766528   \nmin    800000.000000     500.000000       3.000000       5.310000   \n25%    849999.750000    8000.000000       3.000000       9.750000   \n50%    899999.500000   12000.000000       3.000000      12.740000   \n75%    949999.250000   20000.000000       3.000000      15.990000   \nmax    999999.000000   40000.000000       5.000000      30.990000   \n\n         installment  employmentTitle  homeOwnership  annualIncome  \\\ncount  200000.000000    200000.000000  200000.000000  2.000000e+05   \nmean      438.737804     72435.750740       0.614100  7.645184e+04   \nstd       262.246698    106892.374933       0.675465  7.766237e+04   \nmin        14.010000         0.000000       0.000000  0.000000e+00   \n25%       248.890000       420.000000       0.000000  4.600000e+04   \n50%       375.430000      7836.000000       1.000000  6.500000e+04   \n75%       580.942500    119739.250000       1.000000  9.000000e+04   \nmax      1715.420000    378338.000000       5.000000  9.500000e+06   \n\n       verificationStatus        purpose  ...             n5             n6  \\\ncount       200000.000000  200000.000000  ...  189889.000000  189889.000000   \nmean             1.010430       1.744410  ...       8.093976       8.527334   \nstd              0.781732       2.367497  ...       4.803759       7.303106   \nmin              0.000000       0.000000  ...       0.000000       0.000000   \n25%              0.000000       0.000000  ...       5.000000       4.000000   \n50%              1.000000       0.000000  ...       7.000000       7.000000   \n75%              2.000000       4.000000  ...      11.000000      11.000000   \nmax              2.000000      13.000000  ...      70.000000      99.000000   \n\n                  n7             n8             n9            n10  \\\ncount  189889.000000  189889.000000  189889.000000  191606.000000   \nmean        8.274840      14.592551       5.596296      11.626891   \nstd         4.550902       8.109357       3.220978       5.464619   \nmin         0.000000       1.000000       0.000000       0.000000   \n25%         5.000000       9.000000       3.000000       8.000000   \n50%         7.000000      13.000000       5.000000      11.000000   \n75%        10.000000      19.000000       7.000000      14.000000   \nmax        83.000000     112.000000      41.000000      90.000000   \n\n                 n11            n12            n13            n14  \ncount  182425.000000  189889.000000  189889.000000  189889.000000  \nmean        0.000833       0.003618       0.088341       2.180316  \nstd         0.030516       0.064276       0.505161       1.841987  \nmin         0.000000       0.000000       0.000000       0.000000  \n25%         0.000000       0.000000       0.000000       1.000000  \n50%         0.000000       0.000000       0.000000       2.000000  \n75%         0.000000       0.000000       0.000000       3.000000  \nmax         3.000000       3.000000      25.000000      28.000000  \n\n[8 rows x 41 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>id</th>\n      <th>loanAmnt</th>\n      <th>term</th>\n      <th>interestRate</th>\n      <th>installment</th>\n      <th>employmentTitle</th>\n      <th>homeOwnership</th>\n      <th>annualIncome</th>\n      <th>verificationStatus</th>\n      <th>purpose</th>\n      <th>...</th>\n      <th>n5</th>\n      <th>n6</th>\n      <th>n7</th>\n      <th>n8</th>\n      <th>n9</th>\n      <th>n10</th>\n      <th>n11</th>\n      <th>n12</th>\n      <th>n13</th>\n      <th>n14</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>2.000000e+05</td>\n      <td>200000.000000</td>\n      <td>200000.000000</td>\n      <td>...</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n      <td>191606.000000</td>\n      <td>182425.000000</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n      <td>189889.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>899999.500000</td>\n      <td>14436.954125</td>\n      <td>3.481690</td>\n      <td>13.244800</td>\n      <td>438.737804</td>\n      <td>72435.750740</td>\n      <td>0.614100</td>\n      <td>7.645184e+04</td>\n      <td>1.010430</td>\n      <td>1.744410</td>\n      <td>...</td>\n      <td>8.093976</td>\n      <td>8.527334</td>\n      <td>8.274840</td>\n      <td>14.592551</td>\n      <td>5.596296</td>\n      <td>11.626891</td>\n      <td>0.000833</td>\n      <td>0.003618</td>\n      <td>0.088341</td>\n      <td>2.180316</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>57735.171256</td>\n      <td>8737.430326</td>\n      <td>0.855195</td>\n      <td>4.766528</td>\n      <td>262.246698</td>\n      <td>106892.374933</td>\n      <td>0.675465</td>\n      <td>7.766237e+04</td>\n      <td>0.781732</td>\n      <td>2.367497</td>\n      <td>...</td>\n      <td>4.803759</td>\n      <td>7.303106</td>\n      <td>4.550902</td>\n      <td>8.109357</td>\n      <td>3.220978</td>\n      <td>5.464619</td>\n      <td>0.030516</td>\n      <td>0.064276</td>\n      <td>0.505161</td>\n      <td>1.841987</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>800000.000000</td>\n      <td>500.000000</td>\n      <td>3.000000</td>\n      <td>5.310000</td>\n      <td>14.010000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000e+00</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>1.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>849999.750000</td>\n      <td>8000.000000</td>\n      <td>3.000000</td>\n      <td>9.750000</td>\n      <td>248.890000</td>\n      <td>420.000000</td>\n      <td>0.000000</td>\n      <td>4.600000e+04</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>5.000000</td>\n      <td>4.000000</td>\n      <td>5.000000</td>\n      <td>9.000000</td>\n      <td>3.000000</td>\n      <td>8.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>1.000000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>899999.500000</td>\n      <td>12000.000000</td>\n      <td>3.000000</td>\n      <td>12.740000</td>\n      <td>375.430000</td>\n      <td>7836.000000</td>\n      <td>1.000000</td>\n      <td>6.500000e+04</td>\n      <td>1.000000</td>\n      <td>0.000000</td>\n      <td>...</td>\n      <td>7.000000</td>\n      <td>7.000000</td>\n      <td>7.000000</td>\n      <td>13.000000</td>\n      <td>5.000000</td>\n      <td>11.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>2.000000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>949999.250000</td>\n      <td>20000.000000</td>\n      <td>3.000000</td>\n      <td>15.990000</td>\n      <td>580.942500</td>\n      <td>119739.250000</td>\n      <td>1.000000</td>\n      <td>9.000000e+04</td>\n      <td>2.000000</td>\n      <td>4.000000</td>\n      <td>...</td>\n      <td>11.000000</td>\n      <td>11.000000</td>\n      <td>10.000000</td>\n      <td>19.000000</td>\n      <td>7.000000</td>\n      <td>14.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>0.000000</td>\n      <td>3.000000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>999999.000000</td>\n      <td>40000.000000</td>\n      <td>5.000000</td>\n      <td>30.990000</td>\n      <td>1715.420000</td>\n      <td>378338.000000</td>\n      <td>5.000000</td>\n      <td>9.500000e+06</td>\n      <td>2.000000</td>\n      <td>13.000000</td>\n      <td>...</td>\n      <td>70.000000</td>\n      <td>99.000000</td>\n      <td>83.000000</td>\n      <td>112.000000</td>\n      <td>41.000000</td>\n      <td>90.000000</td>\n      <td>3.000000</td>\n      <td>3.000000</td>\n      <td>25.000000</td>\n      <td>28.000000</td>\n    </tr>\n  </tbody>\n</table>\n<p>8 rows × 41 columns</p>\n</div>"
     },
     "execution_count": 343,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "testA.describe()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:30.186379600Z",
     "start_time": "2024-09-26T13:41:29.981839700Z"
    }
   },
   "id": "af744916e39ec16d",
   "execution_count": 343
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 查看数据集中特征缺失值，唯一值等"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5a87510e68b27675"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "22"
     },
     "execution_count": 344,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().any().sum()\n",
    "# todo 有22列特征有缺失值"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:30.307571700Z",
     "start_time": "2024-09-26T13:41:30.186379600Z"
    }
   },
   "id": "974cdee5622ed292",
   "execution_count": 344
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 缺失值占总样本的比例"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "209e5feb27724dec"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "{'id': 0.0,\n 'loanAmnt': 0.0,\n 'term': 0.0,\n 'interestRate': 0.0,\n 'installment': 0.0,\n 'grade': 0.0,\n 'subGrade': 0.0,\n 'employmentTitle': 1.25e-06,\n 'employmentLength': 0.05849875,\n 'homeOwnership': 0.0,\n 'annualIncome': 0.0,\n 'verificationStatus': 0.0,\n 'issueDate': 0.0,\n 'isDefault': 0.0,\n 'purpose': 0.0,\n 'postCode': 1.25e-06,\n 'regionCode': 0.0,\n 'dti': 0.00029875,\n 'delinquency_2years': 0.0,\n 'ficoRangeLow': 0.0,\n 'ficoRangeHigh': 0.0,\n 'openAcc': 0.0,\n 'pubRec': 0.0,\n 'pubRecBankruptcies': 0.00050625,\n 'revolBal': 0.0,\n 'revolUtil': 0.00066375,\n 'totalAcc': 0.0,\n 'initialListStatus': 0.0,\n 'applicationType': 0.0,\n 'earliesCreditLine': 0.0,\n 'title': 1.25e-06,\n 'policyCode': 0.0,\n 'n0': 0.0503375,\n 'n1': 0.0503375,\n 'n2': 0.0503375,\n 'n3': 0.0503375,\n 'n4': 0.04154875,\n 'n5': 0.0503375,\n 'n6': 0.0503375,\n 'n7': 0.0503375,\n 'n8': 0.05033875,\n 'n9': 0.0503375,\n 'n10': 0.04154875,\n 'n11': 0.08719,\n 'n12': 0.0503375,\n 'n13': 0.0503375,\n 'n14': 0.0503375}"
     },
     "execution_count": 345,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "have_null_dict = (train.isnull().sum()/len(train)).to_dict()\n",
    "have_null_dict"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:30.444451Z",
     "start_time": "2024-09-26T13:41:30.299602Z"
    }
   },
   "id": "89c7b3d5fc84e4d8",
   "execution_count": 345
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 查看缺失特征中缺失率大于50%的特征"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "57fd61ef3791d3d9"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "{}"
     },
     "execution_count": 346,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fea_null_moreThanHalf = {}\n",
    "for key, value in have_null_dict.items():\n",
    "    if value > 0.5:\n",
    "        fea_null_moreThanHalf[key] = value\n",
    "fea_null_moreThanHalf"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:30.446048300Z",
     "start_time": "2024-09-26T13:41:30.436673400Z"
    }
   },
   "id": "3ba0c91dda26ceda",
   "execution_count": 346
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 具体地查看缺失特征及缺失率\n",
    "# nan可视化"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "939da1258e5e63bd"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Axes: >"
     },
     "execution_count": 347,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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rlypoKAgdezY0Wc/3znS0tJks9lUpkwZj2scOnRI27dvV506dXLdtuXChQt69913NWzYMG9b9Ytjx44pISFBR44cUWZmpkqUKKGqVauqbdu2KleunNv1du3apZtvvtn5PXn69GmtWrVKycnJuvHGG9WlSxeVKlXK109D48eP1xNPPOHx90dqaqqSk5NVr149hYSE6PDhw/ryyy/lcDjUqVOnPG/H464zZ87o448/VlJSkv48Z+3kyZO9ru8vATvDbnZ2tt599119/fXXSk5O1ieffKKnn35a77zzjldf0qdOndLIkSP1v//7v7Lb7frXv/6l+++/X++8847atm3rVc/r1q3T3//+d1WvXl1JSUlatmyZHnnkEcXGxmrEiBFe1faX9PR0ffTRRxo6dKiOHz+uiRMn6uLFixo1apRq1apV2O3lsnbtWs2bN08JCQnKyMiQZVmy2WwqVaqUoqOj9dxzz7n9i2rUqFFXfCw+Pl4dO3ZU6dKl3f6iSExM1KhRo7Rt2zbVqVNHDz30kO69917n4xkZGWrWrJl27tzpVl1J+u2339SvXz+VKVNGdrtdp06d0l133aWRI0d6HIYkKSIiQk2bNtWpU6f05JNP6u6775bd7psDwGlpac77paWkpKhLly7q3r27mjRposOHD2vu3Lm677779Oyzz7pVd9y4cfrss89UtmxZlShRQjNmzNBTTz2l0qVLKyQkRMePH9dHH32kW2+91e2e//Of/+iVV17R6dOn1a1bNz333HMaO3as4uPjZbfb1alTJ02ePFmlS5d2q+5XX32l559/XiVKlNAff/yhli1baty4capTp44k7z4b/nT27FmNHTtWv/zyiyIiIlS+fHmFhoYqLS1N27dvV1paml566SWXz3l+3HLLLdqwYYPKli2rn3/+WY8//rgqVqyoSpUqac+ePapQoYIWLFjg0Wd7w4YNV3zsscce08SJE3X99derRYsWbtX9+eefNXToUGVmZqpWrVqaPn26HnvsMTVq1EinTp3Szp07NW3aNN15551u93y5QYMGaffu3WrTpo1KlCjh8lhRDi+yAtTkyZOt22+/3Zo9e7bVtGlT69ChQ9Zzzz1nPfroo17VHTJkiPXwww9bGzdutJo1a2YlJSVZH330kdWzZ0+ve7777ruthQsXWpZlWc2bN7eSkpKsDRs2WO3bt/e6tr889dRTVo8ePazs7GxrxIgRVv/+/a0HH3zQevDBBwu7tVzmzJljde7c2fr666+t5ORkKy0tzbp48aJ15swZa926dVbfvn2tzp07W3/88YdbdUeNGmXdfPPN1j333GPNnDnT5U+jRo2siRMnWjNnznS734cfftgaOHCgtXz5cmvGjBlW8+bNrYcffthKSUmxLMuy0tPTrZtvvtntupZlWQMHDrSmTJni/PeqVaushg0bWk2aNLFmzpxpnT9/3qO6N998s3Xu3Dnru+++s7p162bFxMRYc+fOtU6dOuVRvct16NDBWrt2rWVZlrVs2TLr2WefdXl87dq1VuvWrd2qefToUatRo0bW3r17LcuyrA8++MBq0KCB9cILLzjX+eCDD6x+/fq53e8ff/xhNW/e3Jo2bZq1evVqq3///la3bt2su+66y9qwYYO1bds2a8CAAdZLL73kdu077rjD+uijjyzLsqyDBw9aTz31lNW0aVNrxYoVlmV599n45Zdf8vXHE8OHD7fGjx+f5+fL4XBYc+bMsRo1amQlJye7VTfnc2dZltWzZ09r8uTJzsdSU1OtBx980Hr66ac96rlt27ZWRESEddttt1nR0dEufyIiIqwOHTpYMTExbtft0aOHNXPmTCstLc2aPn26FRUVZX3++efOx5999lmrc+fOHvV8uSZNmlg7d+70uk5BC9jw0rp1a+cblhME9u/fb0VFRXlVt1mzZs4frJy6R44csZo2bep1z82bN7eOHj3qUvvo0aNW8+bN3a41YMAAKyMjw7Isy+rfv781YMCAPP/4oue9e/daDofDatmypXXq1CkrKSnJJ6+Hr7Vt29b6/fffr/h4enq6FRUVZf373/92u/aaNWustm3bWiNHjnR+iVrW/38fPXHrrbdax44dc/77xIkT1qBBg6zo6Gjr999/t9LT062IiAiPakdGRlonTpxwWfboo49ab775ptWxY0erU6dO1g8//OB23ct/iViWZa1evdrq16+f1bBhQ+uRRx6x5s6d6/EX6WeffWZFRUVZI0eOtBYuXGjNmDHD5fGjR49akZGRbtXctm2b1b17d5dlbdu2dYaZnLqefJ4TEhKsLl26OP99+vRpq3Hjxta6deucyw4cOOB24LIsy2rQoIGVmprqsmzJkiVW06ZNrVmzZnn12ejcubMVERFhRUREWDfffHOef7z53CUmJl51nTZt2ljff/+9W3UjIiKcn7tGjRo5v0dzbNy40erQoYN7zf6fU6dOWcOHD7fatm1r/fjjjy6PefPz3bhxY+fPd1pamnXzzTc7v7Mty7K+/vpr69Zbb/Wo9uV69Ohh/fzzz17XsSzL6tSpkxUTE3PNP74QsGNeQkNDlZWV5bLswoULHp1PvdwNN9ygLVu2uIxhOHTokFeH2nM0bdpUr776ql566SXnudv4+Hg1bdrU7VotW7ZUUFCQJKlVq1Ze93YldrtdQUFB2rNnj8LDw1WxYkXt3r1bJUuW9Kje1U7BXM7Tw52HDx9W/fr183wsPT1dFy9e1HXXXed23ejoaMXHx+ull15SbGysXn31VTVv3tyjHnOULFlSp0+fVuXKlSVJ119/vT788EO9/vrr6tOnj6ZMmeJx7erVq2vv3r26/vrrnctOnDihe++9V0OHDtX8+fP19NNPX/WQeV7+PDarY8eO6tixo/bv369ly5bp888/1+TJkz06nXH//ferTZs2euGFFzRx4kTVrFlTAwYMUMWKFSVJK1asUEREhFs169atq8OHD2vv3r3Oz8W8efNUt25d5zo//PCDRz/f4eHhOnfunLKzsxUUFKTw8HD9/e9/d/l5PHv2rNt1JalatWpat26dunXr5lx27733qn79+ho6dKj27dvnUV1J+uSTT/TII4+oV69e6t27t8d18lK3bl199NFHGj16dJ6nE5cvX6709HQ1atTIrbqWZWn79u1q1qyZbrjhBp06dcrl9K9lWcrMzPSo54oVK+of//iHli5dqpEjR6p79+569tlnvR7TFRYWptTUVFWuXFlHjx6VJB04cMA5zuXUqVOqVKmSV/uQpIkTJ2r06NF6/PHH1aZNG+epV08899xzevbZZzVw4EDnKUp/CdgxL9OnT9eyZcs0ePBgTZs2TRMmTNDnn3+uJk2aeDV+ZOnSpRozZow6duyodevWqVevXvr222/19NNPKzY21queDxw4oIcffljHjx9Xdna2KlWqpODgYH300UeqXbu2V7X95ZlnnlFCQoIsy1KnTp304IMP6oUXXlCFChX0xhtvuF3Pn+Hl/fff1zvvvKOBAweqXbt2ql27tkJDQ3XixAlt2LBB77//vho0aKB//OMfbte+3NKlSzV58mT16tVLixYt0pdffunRL7/Ro0dr7969mjlzZq5xOAsXLtSkSZOUnZ3tURCYM2eOZs+erYcfflg1atTQihUrdPjwYS1btsy5zqlTp9wOchEREdq4ceNVvyCPHTvm9QDYefPm6c0331R2draaNGmizMxM7dy5Ux9++KHbYw8+//xzvfrqq3rllVdyjS+YNWuW3n33XU2bNk133HGH230++uijys7OVlxcXK4v+x07dujZZ59V69atNXbsWLfqfvXVV3rxxRcVFxenHj16uDx26NAhDRo0SEeOHPF4zMuxY8f00EMP6d133/XJQO4cCQkJeuSRR1S2bFm1adNGtWrVUmhoqE6ePKlffvlFO3fu1MSJE3XPPfe4VXf48OHaunWr0tLSFBISooiICM2bN0+StGXLFo0fP16NGjXS+PHjver/6NGjGjVqlE6ePKnXX39dAwYM0NKlSz36+X7vvfe0bNky3X777Vq1apWqV6+uI0eOaMCAATpx4oQ++eQT3XPPPW5/NqRLP4eX/49ETgz48/9cePL5WLVqlWbMmKElS5YoNDTU7e3zK2DDS1ZWlqZPn65PP/1UmZmZKlWqlHr37q2RI0d6nZjXrFmjRYsWKTk5WVWrVlXfvn0VExPjk74zMzO1du1a51Ukt99+u9uD+QpSenq63nvvPYWGhmrQoEE6cOCA5s6dq+eff975f8RFySeffKKPPvpIBw8edP4g2+12NWzYUPfcc4/69u3rPGLljWPHjmnUqFH6+eeftWbNGo+uNsrKytKkSZP0xx9/5HmUZeXKlXrvvff0r3/9y6Me586dq88++0wpKSlq0qSJ4uLiVL16dY9q5Rg1apTGjRvn1y+1HCdPntQXX3zh/Fnp2rWrx79o9+/fr/Pnz+c6crNkyRLddNNNHg3WlS69h++8847q1KmT6xfyk08+qcqVK+u5557z6Dtp69at2rdvn+67775cj505c0bx8fEaMGCAR33706lTp/TZZ59p586dOnfunIKDg1WhQgVFRUWpc+fOXn1vJCYmavPmzfr99981cuRISZcGrN5yyy16+umnfXYF3Pz58zVz5kxlZGRo1apVHh95//rrr7VlyxY1aNBAPXv21Mcff6zFixfL4XCoVatWevLJJz36/v/ll1/ytV7Lli3dri1dGsR84403+uTI0JUEbHi5XEpKSpH8RYrCk56errS0NAUFBal8+fI++1I7fPiwZs+eraSkJDkcDiUnJ+uGG25QUFCQ8/8E3eVwOHx2xU5eDh8+rLffflvJycm5LqX0tOecujmvhS/r+rO2P3v2FxNf55zab7/9trP25UcFvH0PL/88X37UwZfv4f79+/X1119r0KBBXp2KkXJ/b+Twdc8mCdgxL5fzNrgsXbo0X+u5e3lfYUpKStKpU6fUuHFjn9T79ddflZiYqLZt2+rAgQM+q+svZcqU8WqOjSt56qmnlJ6ers6dO+e6LNFT/gwukjRixAilpaX5tGfJP6+Fv2v7s2d/MfF1lsz83F2uTp06PptHx1+vhXTpNE/Hjh1djiivX79en3/+uV5//XWf7sunfDLsN8DldXlcgwYNrLZt21oNGza0IiIirOjo6MJu84q6detmpaenuyz79ddfrbZt23pd++DBg9Ydd9xh3XzzzdYtt9xi7dq1y2rQoIEVHx/vdW0TNWnSxDpw4EBht+EWf/Xsz9fCxJ79xcTX2Z+1eQ9dXX4lVo7k5GSrUaNGftmfr3DkxQfWrFnj/PvkyZN1+vRpxcXFqVy5ckpPT9ekSZM8Pu3g76trJOn33393ORQpXbpqytMrHS43duxYNWvWTPPnz1e3bt1Urlw5TZ06VbNnz3a5EqIoyO+VM+4O+Lxco0aNtHv3bp8MsC6IfiXf9lwQdf1Z29d1TfvMFYfavIeurDxGjpw4ccKjU10F9Z0kBdhpoz+PsL4Sb2ad/Pzzz/XVV185L7kuU6aMhg0bph49emjcuHEe1/WHy093ffXVV87Lly3L0r///W+PByFebvv27Xrttddcrh5p0aKF4uLivK7ta2PHjtWhQ4ck5f0DLV06x+zN52P48OGKi4tTUlKS2rRp43JpvruD+gqiX8m3PRdEXZN6Nu0zVxxq8x5eEhMTI5vNJpvNptjYWOfvRsuydPToUT3xxBNu1yyo7yQpwAbs+nuEtSTdeeed6t+/v8so/k8++UQffvihVq1a5XFdf8i5AurIkSO64YYbXK6uqVu3rkaPHq0bb7zRq3307NlTsbGxGjRokFq0aKFly5Zp9+7dmjlzpkdXwXTs2FFffvmlypQp4/zhy8t3333ndu3Tp0/7bf6KHH++WsVmszkHI7r7A10Q/Uq+7bkg6vqztq/rmvaZKw61eQ8vWbJkiSzL0pgxYxQXF+e8t5PNZlPdunU9GpdYUN9JUoCFl4KwcuVKjRw5UnXq1FH16tV19OhR7d27V6+++qq6du1a2O3lKT9zb3jqhx9+0OOPP66IiAjt2bNH0dHRWr9+vaZNm6Z27dq5XW/JkiW65557FBwcrCVLllxxvT/PbZFf/pq/IkdSUtIVH/PkMmR/9yv5vmd/1/VnbX/UNe0zZ3pt3kNXvv7+L4jvJInw4hf79u3TihUrdPLkSV1//fW64447dPPNNxd2W1fUrl07rVq1ym/zxezYsUOfffaZc96b3r17q0GDBn7ZFwAg/z755BP97W9/U3CwWaNICC9+cuHCBR09elRVqlTx6+V4Z8+eVXp6utvnPd966618reerS/1MY9p8Hqb1i9x4D81n4nv44osv6qmnnso1ZUhaWpo2bdqkNm3aeHTBib9fC7Oilg+dOXNG4eHhLst+++03bd26Vf369fO47oULF/Tqq69q0aJFznuW9OnTR88//7zXyXbIkCGaMWOGy32B9u7dq2effdbliqf8WL9+vUvPW7du1fXXX++cgvr48eNq0qRJwIYX0+bzMK1f5MZ7aD4T38PffvtNGzdu1MGDBxUREaH27dtLujTD865du9SjRw8988wzbtf1+2vh/6uxi6a8rm3/73//azVr1syruq+//rp15513WqtXr7b27t1rrV692urSpYs1ffp0r+paVt49nzhxwmrYsKFXdZ9++mnrtddesy5evGhZ1qVbz8+YMcN68sknvapbGPbu3Wt9++23XtcxbS4I0/pFbryH5jPxPZwyZYrVtGlTq1evXlbLli2tCRMmWNnZ2VbDhg2trVu3Wh07dvSorr9fi4A98mLlcbasZMmSueY7cVd8fLxmzpzpvOtpvXr1VKlSJQ0fPtzjGz7mXDtvWZY2bdrkHJtiWZbWrVunevXqedXzmjVrtHz5cucMizabTb1793b75meX99usWTPZ7farXvfv7bX+UVFR+uGHH1wGmjkcDo0ZM0adOnXyqrY/51XwB9P6RW68h+Yz8T1ctmyZFixYoIYNG+rkyZOKjo7Wo48+KsuyVLt2becdrd3l79ci4MJLzqRvNptN48aNczmXt2XLFkVHR3tV/+LFi7luOleiRAllZ2d7XDPnsmubzabHHnvMudxms6levXqaNGmSx7UlqVatWlq4cKGeeuopBQUFybIsffrpp7rhhhs87jdn9PqVbvzmi0spMzIyci0rX768zp8/71Vdyb/zV/iDaf0iN95D85n4HoaEhOj06dOSLo2htNvtysjIULly5XTx4kWPJ1j192sRcAN2c8LL0qVLdffddzvPxeVc296/f3+XMSXueuWVV7Rp0yaNHTtWN954ow4cOKCJEyeqWbNmGjNmjFe933LLLdqwYYPPL2lev369/v73v8tms6lKlSo6ceKELl68qLfeekutW7f26b58IWew8axZs/Too4+6nE9dv369SpYsqffff9+rffhz/gp/MK1f5MZ7aD4T38MlS5YoLi5OFSpU0JkzZ1SnTh3VqlVLP/30k/r3768ffvgh3/fvu5y/X4uACy85/DW3yR9//KG4uDjFx8c736x77rlHr7zySq4jMu7y53wsp0+f1rp163TixAlVqlRJ7dq10/XXX+/z/fhCztGcjRs3KjIy0nm6K2dyvWHDhum6667zah/+nFfBH0zrF7nxHprP1Pfw0KFD2rlzp2666SaFhYVp/vz5io2N1bhx49S3b1/dddddbtf092sRsOHl6aef1uTJk70OFFdy+vRpJSYmqnr16l7ftTpHVlaWMSPYC4I/wxwAoOgKuDEvOaZPn+7TeseOHVN8fLxq1KihLl26qEKFCnrzzTed/65Ro4bX+yC4uGrSpInLbdwBAO65cOGCvv766zznYynKU2UEbHjxpV9++UWDBw9WzZo11bdvX+fy5ORk/fzzz/rHP/6hf/7zn17dM8lUGRkZmjZtmjp16qTWrVurX79+ql27tsaOHev1jL6ffvqpj7oEgMA0cuRIrV27Vg0bNnQZnJufmxgXpoA9beRLPXv2VO/eva94I6rZs2fr22+/9ehGhMnJyc6R2cnJyVdcr6iOZB87dqy2bdumadOm6S9/+YtWr16td955R7feeqtHd9lu0aJFnj9UNptN4eHhat++vUaMGKEyZcr4oHsAKN4iIyP13nvveT11RUELqCMvb731lgYPHqwSJUpcdXp8dw+V/fe//73qTQa7d++ud999162aOWJiYpzjOvK6i3JRH8m+Zs0azZ8/3zkXTadOnXTjjTfqwQcf9Ci8jB49+oqPnTlzRosWLdL58+c1YcIET1sGgIBRtWpVv93Xzp8CKrysX79e//M//+P8e148OVTWoEEDffjhh4qLi8vz8c8++0z169d3u64kfffdd84Bqd99951HNQqT3W7PNceNN3PeXOtu0c2aNdPQoUM9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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "missing = train.isnull().sum()/len(train)\n",
    "missing = missing[missing>0]\n",
    "missing.sort_values(inplace=True)\n",
    "missing.plot(kind='bar')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:30.742605800Z",
     "start_time": "2024-09-26T13:41:30.442371900Z"
    }
   },
   "id": "aca7c9c6eecf95e0",
   "execution_count": 347
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 查看训练集测试集中特征属性只有一值的特征"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f77e0abe39890ebd"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['policyCode']\n",
      "['policyCode']\n"
     ]
    }
   ],
   "source": [
    "one_value_fea_train = [col for col in train.columns if train[col].nunique() <= 1]\n",
    "print(one_value_fea_train)\n",
    "one_value_fea_test = [col for col in testA.columns if testA[col].nunique() <= 1]\n",
    "print(one_value_fea_test)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.378393900Z",
     "start_time": "2024-09-26T13:41:30.742605800Z"
    }
   },
   "id": "c5b40b938f986ebd",
   "execution_count": 348
  },
  {
   "cell_type": "markdown",
   "source": [
    "总结：\n",
    "47列数据中有22列都缺少数据，这在现实中很正常。‘policyCode’具有一个唯一值（或全部缺失）。有很多连续变量和一些分类变量。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "6d76ea40087f28be"
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 查看特征的数值类型有哪些，对象类型有哪些"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "728fc4320fb187d9"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "['id',\n 'loanAmnt',\n 'term',\n 'interestRate',\n 'installment',\n 'employmentTitle',\n 'homeOwnership',\n 'annualIncome',\n 'verificationStatus',\n 'isDefault',\n 'purpose',\n 'postCode',\n 'regionCode',\n 'dti',\n 'delinquency_2years',\n 'ficoRangeLow',\n 'ficoRangeHigh',\n 'openAcc',\n 'pubRec',\n 'pubRecBankruptcies',\n 'revolBal',\n 'revolUtil',\n 'totalAcc',\n 'initialListStatus',\n 'applicationType',\n 'title',\n 'policyCode',\n 'n0',\n 'n1',\n 'n2',\n 'n3',\n 'n4',\n 'n5',\n 'n6',\n 'n7',\n 'n8',\n 'n9',\n 'n10',\n 'n11',\n 'n12',\n 'n13',\n 'n14']"
     },
     "execution_count": 349,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numerical_fea = list(train.select_dtypes(exclude=['object']).columns)\n",
    "numerical_fea"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.439609200Z",
     "start_time": "2024-09-26T13:41:31.371338600Z"
    }
   },
   "id": "60b0a3102b141213",
   "execution_count": 349
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "['grade', 'subGrade', 'employmentLength', 'issueDate', 'earliesCreditLine']"
     },
     "execution_count": 350,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "category_fea = list(filter(lambda x: x not in numerical_fea,list(train.columns)))\n",
    "category_fea  "
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.441749900Z",
     "start_time": "2024-09-26T13:41:31.428763600Z"
    }
   },
   "id": "de697a7cbbc79b24",
   "execution_count": 350
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 划分数值型变量中的连续变量和离散型变量"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "7e49bc05834b9b85"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "#过滤数值型类别特征\n",
    "def get_numerical_serial_fea(data,feas):\n",
    "    numerical_serial_fea = []\n",
    "    numerical_noserial_fea = []\n",
    "    for fea in feas:\n",
    "        temp = data[fea].nunique()\n",
    "        if temp <= 10:\n",
    "            numerical_noserial_fea.append(fea)\n",
    "            continue\n",
    "        numerical_serial_fea.append(fea)\n",
    "    return numerical_serial_fea,numerical_noserial_fea\n",
    "numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(train,numerical_fea)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.677299Z",
     "start_time": "2024-09-26T13:41:31.432814900Z"
    }
   },
   "id": "f16e9c10c777fc68",
   "execution_count": 351
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "['id',\n 'loanAmnt',\n 'interestRate',\n 'installment',\n 'employmentTitle',\n 'annualIncome',\n 'purpose',\n 'postCode',\n 'regionCode',\n 'dti',\n 'delinquency_2years',\n 'ficoRangeLow',\n 'ficoRangeHigh',\n 'openAcc',\n 'pubRec',\n 'pubRecBankruptcies',\n 'revolBal',\n 'revolUtil',\n 'totalAcc',\n 'title',\n 'n0',\n 'n1',\n 'n2',\n 'n3',\n 'n4',\n 'n5',\n 'n6',\n 'n7',\n 'n8',\n 'n9',\n 'n10',\n 'n13',\n 'n14']"
     },
     "execution_count": 352,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numerical_serial_fea"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.681723500Z",
     "start_time": "2024-09-26T13:41:31.679405600Z"
    }
   },
   "id": "75d1a1bb68229bb4",
   "execution_count": 352
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "['term',\n 'homeOwnership',\n 'verificationStatus',\n 'isDefault',\n 'initialListStatus',\n 'applicationType',\n 'policyCode',\n 'n11',\n 'n12']"
     },
     "execution_count": 353,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numerical_noserial_fea"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.686383300Z",
     "start_time": "2024-09-26T13:41:31.681723500Z"
    }
   },
   "id": "32148ac0118ba1f",
   "execution_count": 353
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "term\n3    606902\n5    193098\nName: count, dtype: int64"
     },
     "execution_count": 354,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数值类别型变量分析\n",
    "train['term'].value_counts()#离散型变量"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.699347400Z",
     "start_time": "2024-09-26T13:41:31.687415800Z"
    }
   },
   "id": "d2f2a558b41c69a1",
   "execution_count": 354
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "homeOwnership\n0    395732\n1    317660\n2     86309\n3       185\n5        81\n4        33\nName: count, dtype: int64"
     },
     "execution_count": 355,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['homeOwnership'].value_counts()#离散型变量"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.739559300Z",
     "start_time": "2024-09-26T13:41:31.695016400Z"
    }
   },
   "id": "a9fb34fad674aafc",
   "execution_count": 355
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "verificationStatus\n1    309810\n2    248968\n0    241222\nName: count, dtype: int64"
     },
     "execution_count": 356,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['verificationStatus'].value_counts()#离散型变量"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.754362Z",
     "start_time": "2024-09-26T13:41:31.703898500Z"
    }
   },
   "id": "46d1680dd00ef314",
   "execution_count": 356
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "initialListStatus\n0    466438\n1    333562\nName: count, dtype: int64"
     },
     "execution_count": 357,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['initialListStatus'].value_counts()#离散型变量"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.756689900Z",
     "start_time": "2024-09-26T13:41:31.715303600Z"
    }
   },
   "id": "19eddc561ebc1b31",
   "execution_count": 357
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "applicationType\n0    784586\n1     15414\nName: count, dtype: int64"
     },
     "execution_count": 358,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['applicationType'].value_counts()#离散型变量"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.783574100Z",
     "start_time": "2024-09-26T13:41:31.723443500Z"
    }
   },
   "id": "2ce6299c7c249a82",
   "execution_count": 358
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "policyCode\n1.0    800000\nName: count, dtype: int64"
     },
     "execution_count": 359,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['policyCode'].value_counts()#离散型变量，无用，全部一个值"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.786348200Z",
     "start_time": "2024-09-26T13:41:31.730478200Z"
    }
   },
   "id": "482dbb6ceeda1daf",
   "execution_count": 359
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "n11\n0.0    729682\n1.0       540\n2.0        24\n4.0         1\n3.0         1\nName: count, dtype: int64"
     },
     "execution_count": 360,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['n11'].value_counts()#离散型变量，相差悬殊，用不用再分析"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.802941800Z",
     "start_time": "2024-09-26T13:41:31.741147900Z"
    }
   },
   "id": "6f02c9fb365e8b45",
   "execution_count": 360
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "n12\n0.0    757315\n1.0      2281\n2.0       115\n3.0        16\n4.0         3\nName: count, dtype: int64"
     },
     "execution_count": 361,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['n12'].value_counts()#离散型变量，相差悬殊，用不用再分析"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.820375800Z",
     "start_time": "2024-09-26T13:41:31.751085Z"
    }
   },
   "id": "ae22e14b46034002",
   "execution_count": 361
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 数值连续型变量分析"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b6ec572206eafc01"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "import seaborn as sns\n",
    "# 每个数字特征得分布可视化\n",
    "# f = pd.melt(train, value_vars=numerical_serial_fea)\n",
    "# g = sns.FacetGrid(f, col=\"variable\",  col_wrap=2, sharex=False, sharey=False)\n",
    "# g = g.map(sns.distplot, \"value\")"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.821395500Z",
     "start_time": "2024-09-26T13:41:31.760470400Z"
    }
   },
   "id": "3131a9053fc3cdce",
   "execution_count": 362
  },
  {
   "cell_type": "markdown",
   "source": [
    "查看某一个数值型变量的分布，查看变量是否符合正态分布，如果不符合正太分布的变量可以log化后再观察下是否符合正态分布。\n",
    "如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出\n",
    "正态化的原因：一些情况下正态非正态可以让模型更快的收敛，一些模型要求数据正态（eg. GMM、KNN）,保证数据不要过偏态即可，过于偏态可能会影响模型预测结果。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "193fdce07e6d5025"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "#Ploting Transaction Amount Values Distribution\n",
    "# plt.figure(figsize=(16,12))\n",
    "# plt.suptitle('Transaction Values Distribution', fontsize=22)\n",
    "# plt.subplot(221)\n",
    "# sub_plot_1 = sns.distplot(train['loanAmnt'])\n",
    "# sub_plot_1.set_title(\"loanAmnt Distribuition\", fontsize=18)\n",
    "# sub_plot_1.set_xlabel(\"\")\n",
    "# sub_plot_1.set_ylabel(\"Probability\", fontsize=15)\n",
    "# \n",
    "# plt.subplot(222)\n",
    "# sub_plot_2 = sns.distplot(np.log(train['loanAmnt']))\n",
    "# sub_plot_2.set_title(\"loanAmnt (Log) Distribuition\", fontsize=18)\n",
    "# sub_plot_2.set_xlabel(\"\")\n",
    "# sub_plot_2.set_ylabel(\"Probability\", fontsize=15)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.823530100Z",
     "start_time": "2024-09-26T13:41:31.764003200Z"
    }
   },
   "id": "f1aee703bfcd4148",
   "execution_count": 363
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "grade\nB    233690\nC    227118\nA    139661\nD    119453\nE     55661\nF     19053\nG      5364\nName: count, dtype: int64"
     },
     "execution_count": 364,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['grade'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.885266Z",
     "start_time": "2024-09-26T13:41:31.767170300Z"
    }
   },
   "id": "8110bf06f9dfc84b",
   "execution_count": 364
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "subGrade\nC1    50763\nB4    49516\nB5    48965\nB3    48600\nC2    47068\nC3    44751\nC4    44272\nB2    44227\nB1    42382\nC5    40264\nA5    38045\nA4    30928\nD1    30538\nD2    26528\nA1    25909\nD3    23410\nA3    22655\nA2    22124\nD4    21139\nD5    17838\nE1    14064\nE2    12746\nE3    10925\nE4     9273\nE5     8653\nF1     5925\nF2     4340\nF3     3577\nF4     2859\nF5     2352\nG1     1759\nG2     1231\nG3      978\nG4      751\nG5      645\nName: count, dtype: int64"
     },
     "execution_count": 365,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['subGrade'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.908615200Z",
     "start_time": "2024-09-26T13:41:31.797647500Z"
    }
   },
   "id": "4d427fab33d4e7d7",
   "execution_count": 365
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "employmentLength\n10+ years    262753\n2 years       72358\n< 1 year      64237\n3 years       64152\n1 year        52489\n5 years       50102\n4 years       47985\n6 years       37254\n8 years       36192\n7 years       35407\n9 years       30272\nName: count, dtype: int64"
     },
     "execution_count": 366,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['employmentLength'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.952403200Z",
     "start_time": "2024-09-26T13:41:31.832887500Z"
    }
   },
   "id": "547df3c26ecef2d8",
   "execution_count": 366
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "issueDate\n2016-03-01    29066\n2015-10-01    25525\n2015-07-01    24496\n2015-12-01    23245\n2014-10-01    21461\n              ...  \n2007-08-01       23\n2007-07-01       21\n2008-09-01       19\n2007-09-01        7\n2007-06-01        1\nName: count, Length: 139, dtype: int64"
     },
     "execution_count": 367,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['issueDate'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.969523500Z",
     "start_time": "2024-09-26T13:41:31.872465600Z"
    }
   },
   "id": "d09c4cbb0831eb89",
   "execution_count": 367
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "earliesCreditLine\nAug-2001    5567\nSep-2003    5403\nAug-2002    5403\nOct-2001    5258\nAug-2000    5246\n            ... \nFeb-1960       1\nSep-1957       1\nJul-1955       1\nMay-1960       1\nJan-1946       1\nName: count, Length: 720, dtype: int64"
     },
     "execution_count": 368,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['earliesCreditLine'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.989643600Z",
     "start_time": "2024-09-26T13:41:31.908615200Z"
    }
   },
   "id": "8a6ca85752d46e55",
   "execution_count": 368
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "isDefault\n0    640390\n1    159610\nName: count, dtype: int64"
     },
     "execution_count": 369,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['isDefault'].value_counts()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:31.993811400Z",
     "start_time": "2024-09-26T13:41:31.946319200Z"
    }
   },
   "id": "4b1756466d6e84d4",
   "execution_count": 369
  },
  {
   "cell_type": "markdown",
   "source": [
    "总结：\n",
    "上面我们用value_counts()等函数看了特征属性的分布，但是图表是概括原始信息最便捷的方式。\n",
    "数无形时少直觉。\n",
    "同一份数据集，在不同的尺度刻画上显示出来的图形反映的规律是不一样的。"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "4f592dae36a24123"
  },
  {
   "cell_type": "markdown",
   "source": [
    "单一变量分布可视化"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b54c8b16f00d9e24"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 1200x800 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABAQAAAKpCAYAAAArNf7lAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABUEElEQVR4nO3de5xVdaH///fMwHgfwRSPeMG0o6YgFxFvkQaVd1FLT6ZYeUUBr6cjJOr5JdlFRQWztLzCsWOWYiamkqWn0iNJgoGa4iUEUREQBkaQmfX7w6/7NIHKZXDQ9Xw+HvN4MOuz19qf/RE37BdrrakqiqIIAAAAUCrVrT0BAAAA4MMnCAAAAEAJCQIAAABQQoIAAAAAlJAgAAAAACUkCAAAAEAJCQIAAABQQoIAAAAAlJAgAAAAACXUprUnUAZFUaSpqWjtaQAAAFAC1dVVqaqq+sDHCQIfgqamInPmLGztaQAAAFACm2yyQWpqPjgIuGQAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBJq09oTIKmurkp1dVVrT2Ot0dRUpKmpaO1pAAAAfKwJAq2suroq7dqtn5oaJ2u8q7GxKfPmLRIFAAAA1iBBoJVVV1elpqY6P/zZHzPjtTdbezqtbssOG2fgMfukurpKEAAAAFiDBIG1xIzX3syLM+a29jQAAAAoCeepAwAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAm1ahCYMmVKjj766HTu3Dm9evXKiBEj0tTUlCQ58sgjs+OOOzb7mj9/fpKksbEx3//+97PHHnvkc5/7XMaNG9fsuC+++GL69++f7t275/jjj8/MmTObjd95553p06dP9thjj1x++eWV50ySRYsWZciQIdltt91y4IEH5tFHH13DqwAAAAAfvlYLAvX19TnllFOy++6756GHHsrIkSMzevTo3HnnnVm0aFGeeeaZ3HvvvZkwYULla6ONNkqSXHnllbn77rszatSojBgxIpdcckmmTJmSJFm8eHFOPPHEtGvXLnfddVf22WefDBo0qPKh/+GHH86wYcNy2mmn5bbbbsuECRMyZsyYyryGDRuWSZMmZfTo0RkyZEjOPffczJo168NfIAAAAFiDWi0IPPfccznssMPyzW9+M5/4xCey5557pmfPnpk0aVImT56cjh07ZrvttktdXV3lq6qqKkuWLMmYMWNyxhlnpFevXpWzAG699dYkyX333Zc5c+Zk+PDh2WabbXLqqaemoaEhEydOTJLceOONOeCAA3LUUUdl2223zZAhQypB4NVXX80999yTYcOGZeedd86+++6bvn375o477mitZQIAAIA1ok1rPXG3bt3SrVu3yvdNTU2ZNm1a9t5770ycODENDQ357Gc/m3nz5qVr164ZMmRIdtlll7zwwgtZtGhRevfuXdm3e/fuufvuu5MkU6dOza677pqNN9642XNNnjw5PXv2zNSpUzN06NDKWJcuXTJz5szMnTs3U6ZMSW1tbXr16lUZ79GjR37zm9+s9utt02b57aWmxm0clse6AAAArFmtFgT+2W233Zb6+vocccQR+fa3v53u3btn8ODBWW+99XLllVfm1FNPze9+97ssWLAgbdu2zRZbbFHZt66uLq+88kqSZMGCBenUqVOzY2+88cbvOV5TU5MNNtggs2bNyoIFC9KxY8e0bdt2ucdeVdXVVWnffoPVOkbZ1NWt19pTAAAA+FhbK4LAtGnT8oMf/CAXXXRR2rVrlxEjRjQbHz58ePbYY4888sgjqauryzrrrNNsfN11101DQ0OSdz7g19bWNhtfZ5118sYbb1TG/3n/ddZZJ4sWLUqbNm3e99irqqmpyPz5i5Y7VlNT7cPvcsyf35DGxqYPfiAAAADN1NWtt0JnXbd6EJg/f34GDhyYfv365fDDD1/uY9Zbb71stNFGeeWVV9KpU6fU19enoaEh6633zgfp+vr6SgRo3759XnrppWb7L1y4sNn466+/3mz83f3bt2+f2bNnL3dsdS1d6sPtymhsbLJmAAAAa1CrXqj91ltvZeDAgenYsWOGDRuWJFmyZEkOOeSQZnf2f+mllzJ79uxss8022XrrrbPZZptlwoQJlfHJkydXLiHo0aNHHn/88TQ2Nr7n+D/uO23atCxcuDBbbLFFOnfunPnz52fatGnL3RcAAAA+LlotCBRFkbPPPjuzZ8/Od7/73SxevDgLFy5MU1NTPvnJT2bo0KGZNGlSHnnkkZx55pnp3LlzevXqlerq6hx88MG56qqrUl9fnzlz5uSmm25Knz59kiR77713Ghsbc/311ydJxo8fnyeffLIyfuihh+a2227LtGnTsnTp0owcOTJdu3bNpptumrq6uuy333659NJLs2TJkkyfPj233357ZV8AAAD4uKgqiqJojSd++umn069fv2W29+rVK1dffXUuvPDCPPzww2nfvn323nvvnHPOOdlkk02SvHMa/ymnnJKnnnoqTU1N2X777XPLLbdkww03TJL86U9/ytlnn52qqqrMnz8/gwYNyumnn155juHDh+e///u/s/7666dNmza5/vrr8+lPfzpJ8sorr+Tkk0/Oq6++moaGhuy111750Y9+lDZtVv3qisbGpsyZs3C5Y23aVKd9+w3yravG5cUZc1f5OT4utt2yfS4586DMnbvQJQMAAACrYJNNNlihewi0WhBYXU1NTXniiSeyZMmS9OzZc5kP7AsWLMjEiROz1VZbZfvtt19m/+effz7Tp09P9+7dU1dX12zs7bffzuOPP57a2tr06NFjtecqCKw4QQAAAGD1rGgQaPWbCq6q6urq9/2wvtFGG2Xfffd9z/Htttsu22233XLH2rZtmz333HO15wgAAABrq1a9qSAAAADQOgQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASatUgMGXKlBx99NHp3LlzevXqlREjRqSpqSlJ8tBDD+Wggw7KbrvtlmHDhmXx4sWV/RobG/P9738/e+yxRz73uc9l3LhxzY774osvpn///unevXuOP/74zJw5s9n4nXfemT59+mSPPfbI5ZdfXnnOJFm0aFGGDBmS3XbbLQceeGAeffTRNbgCAAAA0DpaLQjU19fnlFNOye67756HHnooI0eOzOjRo3PnnXfmmWeeycCBA3PYYYdl7NixefPNNzNixIjKvldeeWXuvvvujBo1KiNGjMgll1ySKVOmJEkWL16cE088Me3atctdd92VffbZJ4MGDap86H/44YczbNiwnHbaabntttsyYcKEjBkzpnLsYcOGZdKkSRk9enSGDBmSc889N7NmzfpwFwcAAADWsFYLAs8991wOO+ywfPOb38wnPvGJ7LnnnunZs2flw3jnzp0zYMCAbL311rngggty++23Z/HixVmyZEnGjBmTM844I7169aqcBXDrrbcmSe67777MmTMnw4cPzzbbbJNTTz01DQ0NmThxYpLkxhtvzAEHHJCjjjoq2267bYYMGVIJAq+++mruueeeDBs2LDvvvHP23Xff9O3bN3fccUdrLRMAAACsEW1a64m7deuWbt26Vb5vamrKtGnTsvfee+fuu+9O3759K2MdOnRI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+D/uO23atCxcuDBbbLFFOnfunPnz52fatGnL3RcAAAA+Lta6IFBbW5tPfvKTGTp0aCZNmpRHHnkkZ555Zjp37pxevXqluro6Bx98cK666qrU19dnzpw5uemmm9KnT58kyd57753GxsZcf/31SZLx48fnySefrIwfeuihue222zJt2rQsXbo0I0eOTNeuXbPpppumrq4u++23Xy699NIsWbIk06dPz+23317ZFwAAAD4u1spLBoYPH54LL7wwX//619O+ffvsvffeOeecc1JTU5MkGTx4cE455ZT07t07TU1N2X777TNgwIAkSdu2bXPZZZfl7LPPzg033JD58+dn8ODB2X777ZMkffv2Tb9+/dKvX7+sv/76adOmTSUeJMn555+fk08+Ofvss08aGhqy11575aijjvrwFwEAAADWoKqiKIrWnsSqaGpqyhNPPJElS5akZ8+eadOmedtYsGBBJk6cmK222qoSA/7R888/n+nTp6d79+6pq6trNvb222/n8ccfT21tbXr06LHac21sbMqcOQuXO9amTXXat98g37pqXF6cMXe1n+ujbtst2+eSMw/K3LkL3UMAAABgFWyyyQYfn5sKLk91dfX7fljfaKONsu+++77n+HbbbZfttttuuWNt27bNnnvuudpzBAAAgLXVWncPAQAAAGDNa/Eg8Je//CX/8z//09KHBQAAAFrQKgeBvn375tlnn11m+8yZMzNkyJDVmhQAAACwZq1yEJgxY0aWLFmyzPZ/+Zd/SX19/WpNCgAAAFizVuqmgjNnzsyMGTMq30+dOjWLFi2qfP/WW2/l9ttvT5cuXVpuhgAAAECLW6kgcMcdd+Tqq69OklRVVeWCCy5oNl5bW5uuXbtm+PDhLTdDAAAAoMWtVBAYNGhQBg0alCTZaaed8stf/jK77LLLGpkYAAAAsOb4sYMAAABQQqscBG655ZZsu+22LTgVAAAA4MOyUpcM/KNevXpl3rx5+ctf/pKlS5cuM7777ruv1sQAAACANWeVg8DYsWNz0UUXZfHixcuMVVVV5amnnlqtiQEAAABrzioHgSuuuCKf//znc/7552eTTTZpyTkBAAAAa9gq30Ogvr4+Rx11lBgAAAAAH0GrHAT69u2bu+66qyXnAgAAAHxIVjkInHTSSXnqqacycODAPPLII5k+fXpmzpxZ+QIAAADWXqt8D4HDDjssSfL000/nt7/9baqqqpIkRVG4qSAAAACs5VY5CPz2t79tyXkAAAAAH6JVDgJbbrllS84DAAAA+BCtchDYaaedKpcJLI9LBgAAAGDttcpB4JZbbqn8uqmpKa+88kruvffeTJkyJRdffHGLTA4AAABYM1Y5CPTq1WuZbUcccUSuvfba3H///enTp89qTQwAAABYc1Y5CLyXE044Ib17927pwwIAAAAtqLqlD/jwww+npqampQ8LAAAAtKBVPkOgT58+y9xU8K233sqcOXNy9tlnr/bEAAAAgDVnlYPA4MGDl9lWU1OTHXfcMTvuuONqTQoAAABYs1Y5CBxxxBGVXzc2NqYoirRp0+K3JAAAAADWgNW6h8Dvf//7HHnkkenSpUu6dOmSI444Ir///e9baGoAAADAmrLKQWD8+PE57bTTstlmm+U//uM/MmTIkGy++eY5/fTT89vf/rYl5wgAAAC0sFU+x//KK69M//79861vfauy7Wtf+1ouueSSXHnllenbt2+LTBAAAABoeat8hsBLL72UPn36LLO9T58+efHFF1dnTgAAAMAatspBYPvtt8+4ceOW2T5u3Lh86lOfWq1JAQAAAGvWKl8ycO6552bAgAGZNm1a9tprryTJ//7v/+Yvf/lLfvzjH7fYBAEAAICWt8pnCPTu3Ts33HBDqqurc/311+enP/1pkuT666/PZz7zmRabIAAAANDyVvkMgSTp2bNnLrvssmy++eaZPXt2/vrXv6Zr164tNTcAAABgDVnlMwSmT5+egw46KJdcckmSd24yOGDAgPTr1y8zZsxosQkCAAAALW+Vg8B3vvOdbLrppjnttNOSJLvttlseeOCBbL755vne977XYhMEAAAAWt4qB4HHH388gwYNyk477VTZtvXWW2fAgAF57LHHWmRyAAAAwJqxykGgTZs2efXVV5fZ/uqrr6ampma1JgUAAACsWat8U8HDDjss3/ve91JdXZ2ePXumqqoqEyZMyKWXXpp+/fq15BwBAACAFrbKQeDcc8/Nq6++mv/4j/9IVVVVkqQoihxwwAE5++yzW2yCAAAAQMtb5SBQW1ubK6+8Mi+++GKeeuqpFEWRnXfeOdtuu20LTg8AAABYE1Y5CLxr2223FQEAAADgI2aVbyoIAAAAfHQJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAkJAgAAAFBCggAAAACUkCAAAAAAJSQIAAAAQAm1ehAoiiKDBw/OqFGjmm1/6KGHctBBB2W33XbLsGHDsnjx4spYY2Njvv/972ePPfbI5z73uYwbN67Zvi+++GL69++f7t275/jjj8/MmTObjd95553p06dP9thjj1x++eVpamqqjC1atChDhgzJbrvtlgMPPDCPPvroGnjVAAAA0LpaNQgsWbIkQ4cOzf33399s+zPPPJOBAwfmsMMOy9ixY/Pmm29mxIgRlfErr7wyd999d0aNGpURI0bkkksuyZQpU5Ikixcvzoknnph27drlrrvuyj777JNBgwZVPvQ//PDDGTZsWE477bTcdtttmTBhQsaMGVM59rBhwzJp0qSMHj06Q4YMybnnnptZs2Z9CKsBAAAAH55WDQIXXXRRampq0r1792bbR48enc6dO2fAgAHZeuutc8EFF+T222/P4sWLs2TJkowZMyZnnHFGevXqVTkL4NZbb02S3HfffZkzZ06GDx+ebbbZJqeeemoaGhoyceLEJMmNN96YAw44IEcddVS23XbbDBkypBIEXn311dxzzz0ZNmxYdt555+y7777p27dv7rjjjg93YQAAAGANa9OaTz5gwIB06tQp/fv3b7Z96tSp6du3b+X7Dh06pH379nn22WfTtm3bLFq0KL17966Md+/ePXfffXdl31133TUbb7xxZbxbt26ZPHlyevbsmalTp2bo0KGVsS5dumTmzJmZO3dupkyZktra2vTq1asy3qNHj/zmN79Z7dfaps3y20tNTatftbFWsi4AAABrVqsGgU6dOi13+4IFC5YZ23jjjTNr1qy0a9cubdu2zRZbbFEZq6uryyuvvPK++77XeE1NTTbYYIPMmjUrCxYsSMeOHdO2bdvlHntVVVdXpX37DVbrGGVTV7dea08BAADgY61Vg8B7qampyTrrrNNs2zrrrJNFixZl0003XWZs3XXXTUNDQ2Xf2traZfZ94403PvDYbdq0ed9jr6qmpiLz5y9a7lhNTbUPv8sxf35DGhubPviBAAAANFNXt94KnXW9VgaB9u3b5/XXX2+2rb6+PrW1tWnfvn3q6+vT0NCQ9dZbr9nYu/u+9NJLzfZduHBhs/H3O/bs2bOXO7a6li714XZlNDY2WTMAAIA1aK28ULtHjx6ZMGFC5fv6+vq88MIL6dixY7beeutsttlmzcYnT55cuYSgR48eefzxx9PY2Pie4/+477Rp07Jw4cJsscUW6dy5c+bPn59p06Ytd18AAAD4uFgrg8Chhx6a8ePH57HHHkuSjBo1Ku3bt0/nzp1TXV2dgw8+OFdddVXq6+szZ86c3HTTTenTp0+SZO+9905jY2Ouv/76JMn48ePz5JNPVsYPPfTQ3HbbbZk2bVqWLl2akSNHpmvXrtl0001TV1eX/fbbL5deemmWLFmS6dOn5/bbb6/sCwAAAB8Xa+UlAzvttFPOPPPMnHDCCdlwww2zePHijBw5MtXV7/SLwYMH55RTTknv3r3T1NSU7bffPgMGDEiStG3bNpdddlnOPvvs3HDDDZk/f34GDx6c7bffPknSt2/f9OvXL/369cv666+fNm3aVOJBkpx//vk5+eSTs88++6ShoSF77bVXjjrqqA9/EQAAAGANqiqKomjtSbyXmTNn5plnnkmXLl2y6aabNhtramrKE088kSVLlqRnz55p06Z521iwYEEmTpyYrbbaqhID/tHzzz+f6dOnp3v37qmrq2s29vbbb+fxxx9PbW1tevTosdqvo7GxKXPmLFzuWJs21WnffoN866pxeXHG3NV+ro+6bbdsn0vOPChz5y50DwEAAIBVsMkmG3x0byr4ro4dO6Zjx47LHauurn7fD+sbbbRR9t133/cc32677bLddtstd6xt27bZc889V26yAAAA8BGyVt5DAAAAAFizBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCEBAEAAAAoIUEAAAAASkgQAAAAgBISBAAAAKCE2rT2BGBNqK6uSnV1VWtPY63Q1FSkqalo7WkAAABrGUGAj53q6qq0a7d+amqcAJMkjY1NmTdvkSgAAAA0IwjwsVNdXZWamur88Gd/zIzX3mzt6bSqLTtsnIHH7JPq6ipBAAAAaEYQ4GNrxmtv5sUZc1t7GgAAAGsl51QDAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEJtWnsCwNqvuroq1dVVrT2NtUZTU5GmpmK1jmFN/09LrCcAACtPEADeV3V1Vdq1Wz81NU4oeldjY1PmzVu0yh9irWlzq7ueAACsGkEAeF/V1VWpqanOD3/2x8x47c3Wnk6r27LDxhl4zD6prq5arSBgTd/REusJAMCqEQSAFTLjtTfz4oy5rT2NjxVrCgBAa3K+KgAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAlJAgAAABACQkCAAAAUEKCAAAAAJSQIAAAAAAl1Ka1JwAAq6u6uirV1VWtPY21RlNTkaamorWnAQCs5QQBAD7Sqqur0q7d+qmpcdLbuxobmzJv3iJRAAB4X4IAAB9p1dVVqampzg9/9sfMeO3N1p5Oq9uyw8YZeMw+qa6uEgQAgPe11gaB0aNHZ/jw4c22DR06NF//+tfz0EMP5fvf/35effXVHHjggbnggguyzjrrJEkaGxtz2WWX5Y477sj666+fb37zmznooIMqx3jxxRdzwQUX5K9//Wu6dOmS733ve+nYsWNl/M4778yoUaOycOHCHH300Tn77LNTXe1fnQDWdjNeezMvzpjb2tMAAPjIWGs/6T7xxBMZNGhQJkyYUPn66le/mmeeeSYDBw7MYYcdlrFjx+bNN9/MiBEjKvtdeeWVufvuuzNq1KiMGDEil1xySaZMmZIkWbx4cU488cS0a9cud911V/bZZ58MGjQoTU1NSZKHH344w4YNy2mnnZbbbrstEyZMyJgxY1rl9QMAAMCatNYGgYkTJ2avvfZKXV1d5au2tjajR49O586dM2DAgGy99da54IILcvvtt2fx4sVZsmRJxowZkzPOOCO9evVK9+7dc/zxx+fWW29Nktx3332ZM2dOhg8fnm222SannnpqGhoaMnHixCTJjTfemAMOOCBHHXVUtt122wwZMkQQAAAA4GNprbxkYNasWZk5c2YuvvjiPP/88+nQoUOOP/74fO1rX8vUqVPTt2/fymM7dOiQ9u3b59lnn03btm2zaNGi9O7duzLevXv33H333UmSqVOnZtddd83GG29cGe/WrVsmT56cnj17ZurUqRk6dGhlrEuXLpk5c2bmzp2b9u3br9ZratNm+e3FTbCWb3XWxZouy3q2PGvasqxny1vddamq8pMb3tXUVKQo3I8BgI+ftTIITJ06NVtuuWXOOeec7LTTTvnTn/6UCy64INtss00WLFiQTp06NXv8xhtvnFmzZqVdu3Zp27Zttthii8pYXV1dXnnllSR5z33fa7ympiYbbLBBZs2atVpBoLq6Ku3bb7DK+5dRXd16rT2FjxXr2fKsacuyni1vdde0qakQBP4fawHAx9VaGQT69OmTPn36VL4/4ogj8sgjj+RXv/pVampqKjcQfNc666yTRYsWZdNNN11mbN11101DQ0OSdz7g19bWLrPvG2+8URl/r2OvjqamIvPnL/8YNTXV/iK8HPPnN6SxsWmV9rWmy7KeLc+atizr2fJaYk395Ib/+6kNq7OeAPBhq6tbb4XOFlwrg8DydOjQIX/+85/Tvn37vP76683G6uvrU1tbm/bt26e+vj4NDQ1Zb731mo0lSfv27fPSSy8123fhwoXNxt/r2Ktr6VJ/iVgZjY1N1qwFWc+WZ01blvVseS2xpn5yw//xexSAj6O18sLLq666Kj/96U+bbXv88cezzTbbpEePHpkwYUJle319fV544YV07NgxW2+9dTbbbLNm45MnT65cQtCjR488/vjjaWxsfM/xf9x32rRpWbhwYbNLEAAAVlZ1dVXatKn29f++XIIBsHZYK88Q6NKlS84777x06tQpHTt2zJ133plJkyZl2LBhqampyVFHHZXHHnssvXr1yqhRo9K+fft07tw51dXVOfjgg3PVVVelR48eWbJkSW666aZ84QtfSJLsvffeaWxszPXXX59TTjkl48ePz5NPPpnvfve7SZJDDz00Q4YMyRFHHJFOnTpl5MiR6dq1azbddNPWXA4A4COsuroq7dqt7waY/6CxsSnz5i1KU5ObNQK0prUyCPTp0ydnnHFGLr744rz11lvZcccdc/PNN2eXXXZJkpx55pk54YQTsuGGG2bx4sUZOXJkqqvf+UN28ODBOeWUU9K7d+80NTVl++23z4ABA5Ikbdu2zWWXXZazzz47N9xwQ+bPn5/Bgwdn++23T5L07ds3/fr1S79+/bL++uunTZs2uf7661tnEQCAj4Xq6qrU1FS7J8P/8+59GaqrqwQBgFa2VgaBJOnfv3/69++/3LGTTjopBx10UJ555pl06dKl2b/gb7jhhhkzZkyeeOKJLFmyJD179kybNv/3Mvfee++MHz8+EydOzFZbbVWJAe8aNmxYvvrVr2b69Onp3r176urq1swLBABKxT0ZAFjbrLVB4IN07NgxHTt2XO5YdXV1evTo8Z77brTRRtl3333fc3y77bbLdtttt9pzBAAAgLWVi9kAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAAACghAQBAAAAKCFBAAAAAEqoTWtPAAAAVlZ1dVWqq6taexprhaamIk1NRWtPA/gIEgQAAPhIqa6uSrt266emxsmuSdLY2JR58xaJAsBKEwQAAPhIqa6uSk1NdX74sz9mxmtvtvZ0WtWW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crAKXn755Zxwwgk57bTT8qUvfWmF9/uv//qvfPe7312DM/toW7p0ac4+++yceeaZueeee/Lggw/mzTffzK233traU/vYeL/3XVbMxIkTs9dee6Wurq7yVVtb29rT+kgriiJDhw7Nv/zLv7T2VD42rrnmmsyfPz9nnXVWa0/lI23q1KnZZptt0rt372y22Wb54he/mO233z7PP/98a0/tI6u2trbZ++dbb72Vn//85znvvPNae2ofWb/4xS+y++6757jjjssnPvGJ9OvXL3369Mm4ceNae2prNUFgLTBgwIB85zvfSdu2bZcZmzp1anr37l35vkOHDmnfvn2effbZ1X7eo446KldccUXl+0WLFqVbt275/e9/n+Sdf0m/8MILs88++6R379657rrrmu1///3356CDDsquu+6agw8+uFklfvnll7PjjjvmhRdeyIgRI7Lvvvs2+5/xueeeS//+/dO9e/d85jOfydVXX73ar2dFdevWrdmbbVNTU6ZNm5ZPfvKTH7jv/Pnz06VLl/zpT3+qbHv00UfTuXPnzJs3L0nywgsv5KSTTkrPnj1z4IEH5qGHHmp2jKuvvjq9e/dO9+7d079//7z00kuVsTvuuCN9+vTJa6+9lnPOOSe9evXK7NmzK+Pjx4/PwQcfnF133TX7779/HnjggVVdhtX29NNP5/TTT8+3v/3t7Lvvviu839ixY3PXXXflqKOOWoOz+2ibP39++vfvX1mjDTfcMJ/61Kcyd+7cVp7Zx8f7ve++n9Z+D1hbzJo1KzNnzszFF1+cLl26pG/fvrn55ptXaN/WXsO16X30n40ZMyYzZszIueeeu8L7WM/3NmXKlFx77bX5/Oc/n3vuuWeFL7+ypsvaYYcd8uyzz+ahhx7KW2+9lfHjx+e5557LZz7zmQ/c13qumGuuuSb7779/PvWpT33gY63p8s2ZMydbb711s21t27ZNmzZtPnDfMq+pILAW6NSp03uOLViwYJnxjTfeOLNmzcrPf/7z9OzZMz179sx1112X6667rvL9z3/+8w983sMPPzy//vWvK98/+OCD2XDDDSsBYujQofnLX/6SG2+8MSNGjMiPf/zjjB07Nkkyffr0nHXWWfnqV7+aBx98MF/5yldyzjnnpLGxsdlzXHjhhXnllVdyySWXZI899qhsHzZsWOrq6vKb3/wmV1xxRX7605/mf//3fz9wzmvCbbfdlvr6+hxxxBEf+Ni6urr06dOn2alH48aNS58+fdKuXbssWrQoJ5xwQjbaaKP86le/ynHHHZeBAwdW3hDGjh2bn/zkJ7niiivym9/8Jptvvvky/1K+ePHinHjiidl+++0zcuTI1NXVJUkWLlyYs846K4cddlgeeOCBHH/88Tn33HNb5WyRxx57LEOHDs3IkSOz6667rtS+PXv2zK233prNNttspZ+3NSPWh2mTTTbJ17/+9cr3f/7zn/OnP/0pBx544AfuW+Y/0FbG+73vvp/WfA9Ym0ydOjVbbrllzjnnnIwfPz6DBg3KpZdemt/97ncfuK/30eV74YUXcuWVV+ayyy7Leuutt8L7Wc/lK4oiF110UdZff/0URZFnnnkmxxxzTG644YYP3NeaLmvbbbfNKaecklNOOSVdu3bNwIEDM2TIkBX68Go9P9gbb7yRsWPH5sQTT1yhx1vT5dt1113zhz/8IfPnz0/yzt/tfv/732e//fb7wH1LvaYFa43jjjuuGDlyZLNt+++/f3H//fc32/aVr3yluOuuu4oFCxYU06dPL6ZPn14MHz68GD58eOX7BQsWfODzzZ07t9hll12Kxx9/vCiKojj11FOL733ve0VRFMXrr79e7LDDDsVvf/vbyuPPP//84qSTTiqKoigWL15cvP7668XixYuLJ598shgxYkSxww47FDNnziyKoiimT59e7LDDDsU555yz3Oc+/vjji1NPPbV45ZVXKsdrbGxckWVqUc8991zRrVu34s4771zhfX73u98VPXr0KN56663i7bffLnr16lX87ne/K4qiKO65555i5513LubOnVt5/Be+8IXiuuuuK4qiKBYsWFDMnTu3WLBgQfHoo48Wp59+etG3b9/KY3/5y18WO+ywQ/Hf//3fyzzvW2+9VXTr1q0YNWpUMX/+/Mq2D9vEiROLz33uc8Vrr722WscZOXJkcdxxx63UPmPGjCn69OlT+f7uu+8u9tlnn2Lp0qVFURTFoEGDikMOOaR45plniscee6zo3r175b/t3//+9+LTn/50MXr06OL1118vbrnllmK33Xar7Pvu79njjjuu+Pd///fiD3/4QzF79uzVeo0t4ZBDDil22GGH4uqrr17hfc4444xiyJAhle8vuOCCYvDgwUVRFMXChQuL/fbbrzjrrLOKGTNmFGPGjCl22WWX4sUXXyyKoijuvPPOYtdddy0mTJhQzJo1qzj33HOLU089tXKsX/7yl8Xee+9dHHLIIcXVV19dPPLII8XixYuLoiiK+vr6Ypdddil+/OMfF7NmzSrGjBlTdOnSpVV+n66o5b3vfpDWeg9Y233zm98szjrrrBV6bNnfR//Z0qVLi6OOOqry//mjjz5afO5zn1vh/a3nsv785z8XO+ywQzF+/PjKtvvvv7/49Kc/vULv7da0ualTpxbdu3cv7rvvvqK+vr547LHHin333bcYN27cCu1vPd/flVdeWQwYMGCl9rGmy2poaCgGDx5cfPazny0GDhxY7L777sV+++1X+XvKBynrmn7w+RO0qvbt2+f1119vtq2+vj61tbXZcMMNs+GGGyZJpTBttdVWK3zsdu3aVUrYpz71qfzhD3+onKY4c+bMJMm///u/p7r6nRNJlixZki233DLJO3c//8EPfpDf//732XrrrfOv//qvSbLMGQKnnnrqcp/74osvzhVXXJEvfelLqa2tzQEHHJCzzz77Q73+dP78+Rk4cGD69euXww8/fIX3+8xnPpN11103Dz74YNZff/20bdu2clbFjBkz0tjYmM9//vOVxzc0NOTll19Okrz22mu56KKL8re//S077LBD1ltvvWV+usEmm2yy3NPp11lnnfzwhz/MddddlxtuuCFbbrlljj/++A/91Ptdd901e++9d6699tp861vfqvz++DAcfPDB+e53v5uJEyemR48e+fWvf51DDz00NTU1mT17du6///786Ec/yg477JAkOeigg3LPPffk8MMPz+abb56HH344dXV1+dvf/pbZs2dnwYIFee2117LFFltUnqNDhw659NJLP7TX9EF++tOf5u67785VV12Vrl27rtDpmUcccUTOPffc/Od//mdqampy33335fvf/36Sd+4S/e7vw3bt2uXYY4/NzTffnPvvvz8nn3xyPv/5z2e//fZLmzZtMmXKlDQ0NOS5555rdvzZs2fnjDPOyL/92781296mTZu0bds2b7/9dtZff/0ce+yx+fKXv5x11lmn5RZkLdBa7wFruw4dOuTPf/7zCj227O+j/+zHP/5xqqurM2DAgFXa33oua+bMmWnTpk2zfxncdddd09jYmL///e/5xCc+8b77W9Pm7rrrruy999754he/mCTZfffd079//9x6660rdPaa9XxvTU1NueOOO3L++eev1H7WdFnrrrtuRo4cmVdffTV//etf88ADD+Siiy5a4c8XZV1TQWAt16NHj2Z3bq6vr88LL7yQjh07tsjxDz/88HzrW9/KjjvumJ122qnywf7dD0jXXntt5ddvv/125QP/zTffnEmTJlUuM3j22WeXe5f+9ddff5ltTU1NeeWVV3LxxRdnww03zDPPPJNvfOMb+Zd/+Zd87Wtfa5HX9UHeeuutDBw4MB07dsywYcNWat82bdrk0EMPzd13350NNtgghx12WGpqapIkHTt2zKabbpr//u//bvZc767Dt7/97XTo0CE333xzqqur81//9V/LfNhab731lvshe968eamtrc1NN92UxsbGPPDAAznzzDPTpUuX7LTTTiu7BKuspqYmw4cPz6hRozJ48OBcfvnlWXfddT+U527NiNVaNt9885x00kl5/vnn87Of/WyFgkBZ/0D7sLTWe8Da5KqrrsoGG2yQk046qbLt8ccfzzbbbLNC+5f9ffSf/fKXv8wbb7xRubSusbExDQ0N6dmzZ3784x+nZ8+e77u/9VzWFltskaamprz11lvZYIMNkqTyPrf55pt/4P7WtLmlS5cucz+TN954Y4V/ZLP1fG+PPvpoFi5cuEKntf8ja/reNt9881x22WXZfffdc/DBB6/wfmVd07X7bxzk0EMPzfjx4/PYY48leefHC7Zv3z6dO3du9rjBgwdn8ODBK338z372s6murs4VV1zR7Br6zTbbLJ///Odz6623prGxMYsWLcrw4cMr18K8++PP3nzzzfzlL3+p3KSvKIoPfM7q6uqcd955ufrqqzN9+vQURZGqqqplPpitKUVR5Oyzz87s2bPz3e9+N4sXL87ChQvz1ltvrfAxDj/88Dz88MMZP358jjzyyMr2d/9lddy4cWnbtm1mzZqVk046qXKvhgULFqSpqSlvvPFGfvOb3+Tqq69eoTVL3lnr/v3751e/+lVmz55deUNZunTpSrz6ljN48ODst99++cY3vpE5c+Z8aM97+OGH59577824cePeM2KNHTu2cvPCd38c5z9GrF/+8pfveZ3e8iLWh23q1Kk544wzmv3eqK2trfyh9EH+8Q+0X//618v9A+3dNXp3nd4NIe/+gfbII49k9OjRy71h5Ir8gTZhwoQMHDgww4YNy9NPP70qy7BWa433gLVJly5dcu211+aBBx7IlClTMnz48EyaNGmloq730f9z66235p577qn8Pzl8+PB06NAhY8eOTZcuXVboGNazuW7duqVTp0658MILM3369EyZMiXf+c53svfee6/wP6pY0/+z55575oknnshll12WcePG5aqrrsott9yS/ffff4WPYT2Xb/z48enVq9cqnSVrTZfvySefzL333psLL7xwpfct5Zp+aBcn8IHe61rWn/zkJ8Uuu+xS7LHHHkW3bt2Khx9+uEWf9zvf+U7RuXPnYt68ec22L1iwoLjggguKvfbaq+jZs2dx5plnVq67mzVrVtG/f/+ia9euxUEHHVT8/Oc/Lz796U9XriV793rs6dOnL/c5J02aVBxzzDFFt27dit13370477zzioaGhhZ9Xe/lqaeeKnbYYYdlvlb2evZ+/foVX/rSl5bZ/vzzzxcnnnhi0aNHj2KfffYpLrvsssp16o899lhx0EEHFd26dSuOPfbY4kc/+lGx8847F7NmzSqK4p3ri97vutGxY8cWBx54YNG5c+fis5/9bHHttdeu1JzXhN/97nfFoYceWrzwwgsrtd+q3EOgKIri7bffLvbaa6+iV69exZgxY5qNnX766cVZZ51VvPjii8UzzzxTnHDCCcUJJ5xQFEVRfO973yu++MUvFi+//HIxceLE4ogjjih22GGH4u9//3tRFB/8e/bDtHDhwmKfffYpLrroomLGjBnF73//+6JHjx7NroX9IE899VSxyy67FN26dSueffbZyvb6+vpi3333La699tpi1qxZxYQJEyrfF0VRHHnkkcVZZ51VvPbaa8W9995b7LnnnsV+++1X2f/9fo+++OKLxU477VTcddddxaxZs4r77ruv2GGHHYonn3xyFVdizVuVewi8qzXeA9Ymt9xyS9G7d+9i9913L4477rjiscceW+ljeB9dvpW9h8C7rGdzL7/8cjF48OBi9913L7p161acdtppK31vGGv6f26++eZi//33Lzp37lzstddexRVXXLHS93+ynsv6/Oc/X9x4442rvL81ba6pqak4+uiji+9///urfIyyrakg8BExY8aM4sEHHyxef/31Fjvmm2++WcyaNav49re/vcI3guKdGPLqq68WX/rSl4pbb721taezVpg0aVLlg/eKWtUgUBStE7E+bE899VRx3HHHFV27di3233//lbrx5bvK9gfah8V7wOqzhi3LerY8a9qyrGfLs6Ytr6xrWlUUH8FzFWkRkyZNyrHHHputt94611xzTT75yU+29pQ+Eq6//vqMGDEie+21V374wx9+7G6YtjabP39+Ghoact1112XOnDnNfgQh/+fVV19NVVVVTj/99HzpS1/KMccc09pT+ljxHrD6rGHLsp4tz5q2LOvZ8qxpyyvrmgoCwEeGiLViyvoHGgAAK0cQAAAAgBLyUwYAAACghAQBAAAAKCFBAAAAAEpIEAAAAIASEgQAoOSGDBmSIUOGtPY01pgdd9wxN910U2tP433dcccd6dOnT2tPA4CSEQQAgI+8p556aq3/0J8kN910U5566qnWngYAJBEEAICPgaeeeiq33HJLa0/jA91yyy2CAABrDUEAAAAASkgQAIC1VENDQ4YPH5699toru+++e84666zMmTMno0aNyjHHHJNvfetb6dq1ay6//PJcffXV6d69e0444YQsXbo0Q4YMyYknnpihQ4emW7du+cIXvpCf//znKz2Hu+66K/vvv386d+6cL3/5y/nzn/9cGTvhhBNy6qmnNnv8Nddckz333DNvv/12+vfvn4suuihf+cpX0qNHj4wbNy6nn356unXrliuuuKKyz7hx43LIIYdk1113zeGHH55HHnmkMjZq1Kj0798/f/nLX3LkkUema9eu+cpXvpLp06cneef+BzvuuGOGDh2aGTNmZMcdd8yOO+6YUaNGrdTrfOSRR/LlL385Xbp0yYEHHphf//rXlbF3r+9//vnnc+yxx6Zr16459NBD8+STT1Yes2TJklx44YXp1atX+vbtm5/85Cc5+uijc+KJJ+bll1+uzGvGjBkZOnRo5ft/9n7PAQAtTRAAgLXURRddlPHjx+eiiy7KZZddlmeffTaDBg1KkkycODFbbbVVjjvuuFx33XX529/+lm9/+9v54x//mKlTpyZJ/vjHP2bOnDm55pprcuCBB+aCCy7Igw8+uMLPP3bs2Jx33nn54he/mJ/85Cfp1KlTvv71r+evf/1rkqRfv3754x//mLlz51b2uffee3PIIYekbdu2SZJf/epXOf7449O1a9ecffbZ6dy5c4499tjcfPPNSd75IH7OOedk//33z/XXX5+uXbvm5JNPzrRp0yrHnDlzZgYPHpwvfelLueqqq/LKK6/k0ksvTZIMGjQov/jFLzJo0KBsttlm+cUvfpFf/OIXOfroo1f4dT7//PM5+eST07lz59xwww056KCDcu655zYLEwsXLsxJJ52U3r1755prrqn893nX9ddfnz/84Q+5/PLLc9xxx+Wyyy7L1772tZxzzjnp0KFDZV6bbbZZZc6/+MUvms3jg54DAFqaIAAAa6Hp06fnV7/6VYYNG5YDDjgg++67b84999w8/vjjefnll7Ptttvm9NNPT+/evZMk559/fg455JAk75xZkCQbbrhhLr/88uy9994555xzsvvuu2f06NErPIeRI0fm4IMPzrnnnpu99torl156aT75yU/mRz/6UZLkC1/4Qtq2bZv77rsvSTJt2rT87W9/yxFHHFE5xiGHHJKDDjoo3bt3bzbnd+d4zTXXpE+fPhk8eHB23333XHTRRdlwww1zzz33VI7x8ssv58ILL8yxxx6b/fbbL/3798/TTz+dJNlqq63SpUuXbLnllqmtrU2XLl3SpUuXbL755iv8Oq+77rp86lOfyn/+539m9913z+DBg7PLLrtk7NixlcfMmzcv/fv3z4ABA7LPPvvk9NNPzzPPPFMZf+KJJ3LggQemd+/e+cY3vpFPfOITKYoiu+yyS7N51dbWZsstt6x8/48+6DkAoKW1ae0JAADLevbZZ1MURQYOHLjM2EsvvZQOHTokSaqqqpJkuR+Ad9xxx2y44YaV77t06VL58P5B5syZkxkzZjR7/urq6uyxxx65//77kyTrr79+vvCFL+See+7JV77ylYwbNy7/+q//ml122aWyzz/O85/nnCR/+9vfMm/evGVOn3/ppZcqv95ss83yxS9+sfL9JptskqVLl67Q61gRf/vb3/LUU08tM4fa2trKr6urq3PMMce85xy22267/PnPf868efMybdq0zJs3L5/61KdWah4f9BwA0NIEAQBYi/30pz/Npptu2mzb2LFjK5cFvJ+iKJp939TUlOrqFTs58N19//HD+7vf/+Nx+/Xrl5NOOimvvvpq7r333hx55JErdPx/9NWvfnWZU/w32mijyq+32WablT7myvr85z9fuRzjXeuuu27l1x06dGj2/T/baaed8rOf/Sx77LFHqqurM3DgwOy0004rNYcPeg4AaGmCAACshf71X/81yTs3q/v0pz+dJHnttdfygx/8IIsXL16hYzz99NOpr6+vnCUwefLkdOrUaYX2/cQnPpEtt9wyjzzySOVDflNTU/73f/+32anue+21VzbddNNcccUVefHFF3PooYeu8GtM3nmdr7/+euU1Ju/cSHCTTTbJsccemySpqan5wOOss846eeutt1bquf9xDs8++2yzOfzXf/1X5s6dW4kE7zeHoihy8cUX5+c//3nWXXfdtGvXLnV1dct9bG1t7XvOc0VeJwC0JEEAANZCW2+9dfr165dvf/vbWbhwYTp06JDrrrsuzz77bA4++ODMmzfvA4+xePHinHPOOfn617+eP/3pT5k4cWKuu+66FZ7DGWeckaFDh6Zjx47Zc88988tf/jLPP/98Lrnkkspjqqurc8ghh+SGG27IZz7zmZW6dj9JBg4cmG984xu54oor8pnPfCYTJ07MD3/4w1x11VUrdZxddtkl8+bNy2233ZZtt902kyZNykknnVQ5I+LFF1/Mn/70p2b7bLLJJtlpp51yyimnpF+/frngggtyyCGH5IUXXsj3vve9nHPOOSv03FVVVVl33XVzyy235JBDDkl9fX3q6uqy5ZZbLnOGRdeuXfOrX/0qO+ywQ+bMmZPa2trst99+K/VaAaClCAIAsJb6//6//y+XX355vvvd7+att97Kbrvtlptuuinjxo1bof332muvdOzYMQMHDswGG2yQ888/P/vuu+8KP//hhx+eJPnRj36U66+/PjvuuGNuvPHGdO7cudnj+vXrlxtuuKHZzQRX1F577ZURI0bkmmuuyQ033JCtttoql1xySfbff/+VOs62226bb3/727n66qvz+uuv55Of/GROOumkyvjPfvaz/OxnP2u2z3777Zdrr70222+/fX7yk5/k8ssvz5133pkOHTrkjDPOyDe+8Y0Vfv5DDjkkv/jFLzJu3LgsWrQoRVFkyy23zE9/+tNst912lcf9+7//e84///yceOKJadu2bc4777yVep0A0JKqin++wBAA+MgbMmRI5s6dm2uvvXaNPUd9fX0mTZqUKVOm5Cc/+Un+53/+p5TXwD/yyCM588wzc8kll2SzzTZLURT5+9//nuHDh2fQoEE5/vjjW3uKALBczhAAAFbJwoULM2jQoKy33noZPnx4KWNA8s5Pb9h///1zySWXZPbs2UmSLbbYIkcccUS+/OUvt/LsAOC9OUMAAAAASmjFfvYQAAAA8LEiCAAAAEAJCQIAAABQQoIAAAAAlJAgAAAAACUkCAAAAEAJCQIAAABQQoIAAAAAlJAgAAAAACX0/wOqdu/tyWIJEQAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 8))\n",
    "sns.barplot(\n",
    "    train[\"employmentLength\"].value_counts(dropna=False)[:20])\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:32.097653600Z",
     "start_time": "2024-09-26T13:41:31.954456200Z"
    }
   },
   "id": "65fed7da51c78660",
   "execution_count": 370
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 首先查看类别型变量在不同y值上的分布"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "261f13564a80ba02"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "train_loan_fr = train.loc[train['isDefault'] == 1]\n",
    "train_loan_nofr = train.loc[train['isDefault'] == 0]"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:32.205152600Z",
     "start_time": "2024-09-26T13:41:32.097653600Z"
    }
   },
   "id": "83ff03604272f751",
   "execution_count": 371
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 8))\n",
    "# train_loan_fr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax1, title='Count of grade fraud')\n",
    "# train_loan_nofr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax2, title='Count of grade non-fraud')\n",
    "# train_loan_fr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax3, title='Count of employmentLength fraud')\n",
    "# train_loan_nofr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax4, title='Count of employmentLength non-fraud')\n",
    "# plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:32.210161400Z",
     "start_time": "2024-09-26T13:41:32.205152600Z"
    }
   },
   "id": "77deeee67bcab40e",
   "execution_count": 372
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 其次查看连续型变量在不同y值上的分布"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "7a6c39edbc87ec14"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))\n",
    "# train.loc[train['isDefault'] == 1]['loanAmnt'].apply(np.log).plot(kind='hist',\n",
    "#           bins=100,\n",
    "#           title='Log Loan Amt - Fraud',\n",
    "#           color='r',\n",
    "#           ax= ax1,\n",
    "#          xlim=(-3, 10))\n",
    "# train.loc[train['isDefault'] == 0]['loanAmnt'].apply(np.log).plot(kind='hist',\n",
    "#           bins=100,\n",
    "#           title='Log Loan Amt - Not Fraud',\n",
    "#           color='b',\n",
    "#           xlim=(-3, 10),\n",
    "#          ax=ax2)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:32.223773700Z",
     "start_time": "2024-09-26T13:41:32.208050500Z"
    }
   },
   "id": "3480922a713e3740",
   "execution_count": 373
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# total = len(train)\n",
    "# total_amt = train.groupby(['isDefault'])['loanAmnt'].sum().sum()\n",
    "# plt.figure(figsize=(12,8))\n",
    "# plt.subplot(121)##1代表行，2代表列，所以一共有2个图，1代表此时绘制第一个图。\n",
    "# plot_tr = sns.countplot(x='isDefault',data=train)#train‘isDefault’这个特征每种类别的数量**\n",
    "# plot_tr.set_title(\"Fraud Loan Distribution \\n 0: good user | 1: bad user\", fontsize=14)\n",
    "# plot_tr.set_xlabel(\"Is fraud by count\", fontsize=16)\n",
    "# plot_tr.set_ylabel('Count', fontsize=16)\n",
    "# for p in plot_tr.patches:\n",
    "#     height = p.get_height()\n",
    "#     plot_tr.text(p.get_x()+p.get_width()/2.,\n",
    "#             height + 3,\n",
    "#             '{:1.2f}%'.format(height/total*100),\n",
    "#             ha=\"center\", fontsize=15) \n",
    "#     \n",
    "# percent_amt = (train.groupby(['isDefault'])['loanAmnt'].sum())\n",
    "# percent_amt = percent_amt.reset_index()\n",
    "# plt.subplot(122)\n",
    "# plot_tr_2 = sns.barplot(x='isDefault', y='loanAmnt',  dodge=True, data=percent_amt)\n",
    "# plot_tr_2.set_title(\"Total Amount in loanAmnt  \\n 0: good user | 1: bad user\", fontsize=14)\n",
    "# plot_tr_2.set_xlabel(\"Is fraud by percent\", fontsize=16)\n",
    "# plot_tr_2.set_ylabel('Total Loan Amount Scalar', fontsize=16)\n",
    "# for p in plot_tr_2.patches:\n",
    "#     height = p.get_height()\n",
    "#     plot_tr_2.text(p.get_x()+p.get_width()/2.,\n",
    "#             height + 3,\n",
    "#             '{:1.2f}%'.format(height/total_amt * 100),\n",
    "#             ha=\"center\", fontsize=15)     "
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:32.225375300Z",
     "start_time": "2024-09-26T13:41:32.215818600Z"
    }
   },
   "id": "c8b8793d63317a6d",
   "execution_count": 374
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 时间格式数据处理及查看"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f5f5ccb384431307"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "import datetime\n",
    "# 转化成时间格式  issueDateDT特征表示数据日期离数据集中日期最早的日期（2007-06-01）的天数\n",
    "train['issueDate'] = pd.to_datetime(train['issueDate'],format='%Y-%m-%d')\n",
    "startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')\n",
    "train['issueDateDT'] = train['issueDate'].apply(lambda x: x-startdate).dt.days"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:36.229819200Z",
     "start_time": "2024-09-26T13:41:32.219474500Z"
    }
   },
   "id": "409620ef920883b2",
   "execution_count": 375
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "#转化成时间格式\n",
    "testA['issueDate'] = pd.to_datetime(train['issueDate'],format='%Y-%m-%d')\n",
    "startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')\n",
    "testA['issueDateDT'] = testA['issueDate'].apply(lambda x: x-startdate).dt.days"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:37.071788600Z",
     "start_time": "2024-09-26T13:41:36.220810100Z"
    }
   },
   "id": "8805af94683b5d23",
   "execution_count": 376
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAGzCAYAAAAv9B03AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABGIElEQVR4nO3de1yUdd7/8TczMIgcx8ySPJRUnhGQwDBTcbszzcharW3T2jTPVHZEw9o207XUPKW15aGV2tvc9ZBph3Xrrv3da0mQ0sJqRep6wsQTDIygM/P7w5trnUTl6ADX6/l48Ki5vnN9r89c3xl4e13f6xo/j8fjEQAAgAlYfF0AAADApULwAQAApkHwAQAApkHwAQAApkHwAQAApkHwAQAApkHwAQAApkHwAQAApkHwAQAApkHwQZPy1VdfqWPHjurYsaNiY2P1y1/+UqtXr77gc30tOTlZa9as8VpWUdvRo0cvSQ0jRozQwoULL8m2amPBggVKSkpSt27dNGrUqGqvv3DhQo0YMaIeKqu9tLQ0dezYUZ06ddKNN96o1NRU7dy585LWUJXPT3JysvGcs3+Sk5Nrte2OHTvqq6++qlUfQFX4+7oAoD7Mnj1bERERWrdundLT01VQUKDU1FSv53Tt2lV//vOfa7yNffv2ae3atef0W11LlixRq1atatXHhaxZs0ZXXXWVEhMTz/ucF154QcHBwfVWQ1344osv9Oabb+rVV19VcHCwfvzxx2r3MXz4cA0ePLgeqqsbV199tV555RXt2rVLixcv1r333qv//u//rnZAX7FihRITE9W5c+ca1XGhz8+SJUtUXl6u3NxcPf/885o9e7auvvpq2Wy2Gm2rNr766ivt379fd9111yXfNhovgg+apGuvvVadO3dWnz59VFZWpjfeeEP33XefLrvsMuM5ISEh6t69e423sX//fi1atKjWwae+jzqtXbtWCQkJFww+HTp0qNca6kJeXp66du2qX/ziF5KkG2+8sdp9XHHFFXVdVp1q1qyZoqOjFR0drV69emngwIGaN2+elixZUq1+/vjHPyosLKzGwedCn5+K92tpaanXc31h69at2rp1K8EH1cKpLjR599xzj06dOqW///3vvi4FtXDq1CkFBAT4uoxL5oorrlD//v3197//XadOnfJZHXx+0NQQfNDkderUSZKUn5/vtfxCc3y2bt2qYcOGKSYmRjfddJNmzZoll8sl6cw8kY4dO2rkyJGSZMxxSEtL8+qjYu5Odna2Ro4cqYEDB1a6rcrm+FT47LPPlJycrJiYGE2ePFlFRUUXXO/suToVdW3dulWLFi0yHu/bt++c7Vxojs/y5cvVv39/de/eXQ888IC+++47oy0tLU1paWn69NNPddtttykmJkajR4+u9tykC21jxIgR6tixoxYtWqStW7car+N8++xCLjTH509/+pNuvfVWRUdH69Zbb9W6deu82nfs2KEHHnhAcXFx6tWrl6ZMmWIc9ZAqn6Py8zHatGmTbr/9dkVHR+vOO+/Uli1bLlhvp06ddOrUKe3du1fSmaMszz33nJKSktSzZ0+NGjXKaNu3b5+xb/bv368pU6YYj8+2d+9eTZgwQbGxsbr55pv16quv6vTp0xesQTr381MbpaWlmjJlimJjY9WnTx+tX7/+nOe8//77GjRokHr06KGBAwfqgw8+MNqq8p5wuVxauHChbr75ZsXGxnrtqwoXG3M0TZzqQpMXHh4uSTpx4kSVnu9wODR27FjddNNNevrpp7V37169+OKLateunX71q19p+PDh6tevnzHHoWKekN1uP6evbdu2adasWbrrrrt05513Vrv2V199VVOnTpXH49H06dP1/PPP69VXX63SuhV1Pf/88+ratauGDx8uSdWaT/Taa69pyZIlevTRR9W5c2ctXbpU999/v9atW6fIyEhJ0j//+U/94x//0BNPPKGAgABNmzZNb775pp555pk62cYLL7ygkpISvffee8rNzdULL7wgSWrTpk2VX8fFfPXVV/rtb3+r1NRUJSYmasuWLZoyZYq6deuma6+9VpI0YcIEtW7dWosXL9bRo0c1c+ZMLV68WE8++WSVtrFlyxY9/vjjmjhxonr16qUPPvhADz/8sNavX6+oqKhK16l471YE3pkzZ+rDDz/USy+9pPDwcC1atEjp6el6++231apVK2PMx48fr3vuuUf9+vXz6q+8vFyjR49Wq1at9Nprr+mnn37SCy+8ID8/Pz322GMXrKGqn5+q+P3vf6+//vWveu655xQaGqoZM2Z4tWdlZenpp5/Wb37zGw0YMEBfffWVnnnmGfXo0UNt27at0nti0aJFWrlypZ599lldeeWVWrhwoR588EF9/PHH8vf3r9KYo2ki+KDJ8/Pzq9bzjx8/rtLSUt1222264YYbdMMNN6h9+/YKCwuTdOYUxBVXXGH8a/9C84TWrFmjjIwMxcTE1Kj2xx57TIMGDZIklZSU6LnnntOUKVOqFF4q6goODlarVq2qPZ/J6XTqzTff1KhRo/Twww9LkmJjY3XLLbdoxYoVmjp1qiTphx9+0OrVq43+MzMztWPHjjrbRsX8o//5n//R7t27azUv63z2798vSbr33nvVsmVL9ezZU927dzf+6J8+fVqHDh3Svffeq169ekk6MxH5QkdKfm7x4sVKTk425oT17NlTH3/8sTZu3KhHHnmk0nUq3rsej0eSlJiYqMGDBxs17NixwwjCNpvN2Dc2m01XXXXVOfvqgw8+0P79+/WnP/1JLVq0MPpYv379eYNPdT8/F1NSUqK//OUvmjx5soYOHWpsY8KECcZzmjVrpt/97ne6++67ZbVadc0112jJkiX69ttv1bZt24u+J8rKyrR06VI9/vjjxjZatGihO+64Q19//bV69ep10TFH00XwQZNX8a/lqv5Ca9Omjfr376+pU6dq06ZN6t69u5KTk3XddddVe9t33313jUOPJCUkJBj/Hx0dLY/Ho3//+9/nDT5ut7vG2/q577//Xk6n02sScXBwsKKjo/Xtt98ay2JiYrz+8LRo0UI//PBDnW6jvvXv319XXXWVhg4dqqSkJOPUR8uWLSVJ/v7+uvfee7VgwQJlZmaqe/fu6tu3r3r06HHBfs8ej++++07Hjx8/59TTnj17zrt+xVGWivfuf/3Xf+n999/XE088oW+++UYHDhwwQlFVfPfddzp16lSlE8PLy8srXae6n5+L2bt3r06fPu2172644Qav53Tt2lUnT57UrFmzlJ2drR07duj06dM6efJklbaxe/dulZWVaebMmZo5c6ZX2549e9SrV6+LjjmaLoIPmryK+SLVOXy9ZMkSZWZm6uuvv9bf//53vfrqq5o1a5ZSUlKqte2L/WG8mLP/tW2xnJmSVzHXqDIHDx6s1fYuVkNFHWf/sW3btm29b6O+2e12bdy4Uf/7v/+rrKws/fGPf9TcuXP13nvvGaehpk2bppSUFONKosWLF+uxxx7TuHHjKu3T5XKpsLDQa9l9991nnHKsEBoaet66vvvuO9lsNrVr104ul0sjR47UTz/9pLvvvltDhgyR2+3W+PHjq/Var7zySr3++uvnLPf3r/zPQU0+PxdSMa4V7+ef/78kvfPOO5o5c6buuusujRgxQnFxcXrggQeqva0ZM2aoS5cuXssqruyrypijaWJyM5q89957T4GBgerbt2+Vnl9x+iAhIUETJkxQRkaGevfufc6N3AIDAyWpyv8KrYns7Gzj///5z39Kktq3by9JslqtcjqdRntOTo5x+P5sNputRjVee+21CgoK8pqAW1paqu3bt3sd4bFardXuu7rbqG+ffPKJNm7cqF/84hd65pln9P7770uSNm7cKEkqKCjQSy+9pI4dO2r06NH6wx/+oOHDh2vVqlVGH1ar1Ws/f/LJJ15XY1133XU6fPiwOnfubPxs3rxZn3/+eaU1FRYW6tNPP9WAAQPk7++v77//Xt98841eeuklTZw4Uf369dOhQ4cqXfd8Y37dddfpyJEjuuKKK4wajh8/ruXLl5/3tF11Pz8X07ZtW1ksFuP9LHm/zyVp9erVGjRokH73u98pJSVFwcHBOn78+Dl9BQYGVvo627dvL5vNppKSEuN1RkVFacWKFcZNIS825mi6OOKDJumHH37Q0aNHtX79em3atEnp6emKiIio0rrBwcFavny5rFarbrrpJv3000/Kzc1V//79vZ537bXXKjg4WG+99ZYSExP13Xff1fmh8tmzZxs3hps7d64GDBigK6+8UtKZq20++OADDR06VAUFBZoyZUqlr7FHjx7auHGj+vTpI6fTqZKSEt1+++0X3Xbz5s318MMP6/XXX1doaKg6deqkZcuW6dSpU/rNb35TJ6/vUmyjKsrLy41TIh06dND27dtVUlKidu3aSTpzVOb9999XWVmZhgwZIofDoS+//NLraFenTp20Zs0aJSUlKTc3V3PmzFHz5s2N9okTJ+o3v/mNXn31Vd10003Kzs7Wa6+9pvnz5xvPOXnypHJycrRnzx4tXrxYAQEBeuKJJySdOdXk5+enDz/8UAEBAfrHP/6hN998U9KZOUhnH7Hp0aOH3n//fV1//fU6evSobDab+vXrpyFDhuiNN97QpEmTNHbsWJ06dUozZ87Udddd53UDwtp8fi4mJCREd9xxhxYvXqyIiAiFhIScczrKbrdr+/bt2rJliw4fPqzFixerpKTknKOd0dHRWrBggT755BOFhITo+++/1wMPPKBmzZpp9OjRWrRokWw2m6KiovTf//3f+uyzz4w5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5ZcrMzNTN998s6Qzk6ErTn3FxcVpzZo1crlcslqtRvstt9xitGdmZqpv376SpPz8fJWUlKh169Zq3769ioqKlJ+fr6ioqHP6ro3Tp+tnkF0ud731jbrHeDUejBXqAu+jczW1fVLrE3c2m03XXHONpkyZou3bt2vLli169NFH1a1bNyUkJMhisWjw4MGaP3++HA6Hjh49qhUrVig5OVmSlJSUJJfLpaVLl0qSNm/erG+//dZoHzJkiFatWqX8/HydPn1aCxYsUI8ePdSyZUuFhYWpX79+euWVV1ReXq69e/dq9erVxroAAABnq5NTXdOnT9dzzz2nBx98UHa7XUlJSXr88ceNIzipqakaM2aM+vTpI7fbraioKI0bN06SFBAQoNmzZ2vy5MlatmyZioqKlJqaahzBGTBggFJSUpSSkqLmzZvL39/fCEmS9Oyzz+rhhx9W79695XQ6deONN2rYsGF18bIAAEATU6Pgs3LlSq/H4eHhmj9//nmfHxISooyMDG3btk3l5eWKj4+Xv/9/Np2UlKTNmzcrOztbbdq0MUJPhfT0dN13333au3evYmNjFRYWZrS1bt1aa9euVVZWlmw2m+Li4mrykgAAgAnUy+TmylgslguGktDQUGMeT2U6dOigDh06VNoWEBCgXr161bpGAADQtDWti/MBAAAugOADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMg+ADAABMw9/XBQAA0FBYrY3reIDb7ZHb7fF1GY0KwQcAYHoRoYFyuz0KCwvydSnV4nK5dfx4KeGnGgg+AADTCwkKkMXip9nvZGnfoWJfl1Mlba4I1ZO/7imLxY/gUw0EHwAA/s++Q8XK33/C12WgHjWuk5kAAAC1QPABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACm4e/rAgDgUrJY/GSx+Pm6jCqzWvn3KVCXCD4ATMNi8VNERHPCBGBiBB8ApmGx+MlqtWj2O1nad6jY1+VUSVynVho5qIuvywCaDIIPANPZd6hY+ftP+LqMKmnTKsTXJQBNSrWP93o8HqWmpmrhwoVeyz///HMNGjRIPXv2VHp6usrKyow2l8ulWbNmKTExUf3799emTZu81t29e7dGjBih2NhYjRw5UgcOHPBqX7t2rZKTk5WYmKg5c+bI7XYbbaWlpUpLS1PPnj1122236csvv6zuSwIAACZRreBTXl6uKVOm6JNPPvFavnPnTk2cOFF33HGH1q1bpxMnTmju3LlG+7x587RhwwYtXLhQc+fO1YwZM5SbmytJKisr06hRoxQREaH169erd+/emjRpkhFuvvjiC6Wnp2v8+PFatWqVMjMzlZGRYfSdnp6u7du3a+XKlUpLS9MTTzyhgoKCGu8QAADQdFUr+Dz//POyWq2KjY31Wr5y5Up169ZN48aNU9u2bTVt2jStXr1aZWVlKi8vV0ZGhh555BElJCQYR3XeffddSdLHH3+so0ePavr06WrXrp3Gjh0rp9Op7OxsSdLy5cs1cOBADRs2TFdffbXS0tKM4HPo0CFt3LhR6enp6tKli/r27asBAwZozZo1dbFvAABAE1OtOT7jxo1T+/btNWLECK/leXl5GjBggPG4VatWstvt+v777xUQEKDS0lL16dPHaI+NjdWGDRuMdaOjoxUeHm60x8TEKCcnR/Hx8crLy9OUKVOMtu7du+vAgQM6duyYcnNzZbPZlJCQYLTHxcXpo48+qs7LqpS/f91e9VFxFQlXkzQOjFfjUZ2xYjzRFNXX+7qp/h6sVvBp3759pcuLi4vPaQsPD1dBQYEiIiIUEBCg1q1bG21hYWE6ePDgBdc9X7vValVwcLAKCgpUXFysyMhIBQQEVNp3TVksfrLbg2vVx/mEhQXVS7+oH4xX48FYwazq+73f1D5bdXJVl9VqVWBgoNeywMBAlZaWqmXLlue0NWvWTE6n01jXZrOds+6RI0cu2re/v/8F+64pt9ujoqLSWvXxc1arRWFhQSoqcsrlcl98BfgU49V4VGesKp4LNCX19Xuqsf0eDAsLqtLRqToJPna7XYcPH/Za5nA4ZLPZZLfb5XA45HQ6FRQU5NVWse6ePXu81i0pKfFqv1DfhYWFlbbV1unT9TPILpe73vpG3WO8Gg/GCmZV3+/9pvbZqpMTd3FxccrMzDQeOxwO7dq1S5GRkWrbtq0uv/xyr/acnBzj1FdcXJyysrLkcrnO2372uvn5+SopKVHr1q3VrVs3FRUVKT8/v9J1AQAAzlYnwWfIkCHavHmztm7dKklauHCh7Ha7unXrJovFosGDB2v+/PlyOBw6evSoVqxYoeTkZElSUlKSXC6Xli5dKknavHmzvv32W6N9yJAhWrVqlfLz83X69GktWLBAPXr0UMuWLRUWFqZ+/frplVdeUXl5ufbu3avVq1cb6wIAAJytTk51derUSY8++qgeeughhYSEqKysTAsWLJDFciZXpaamasyYMerTp4/cbreioqI0btw4SVJAQIBmz56tyZMna9myZSoqKlJqaqqioqIkSQMGDFBKSopSUlLUvHlz+fv7GyFJkp599lk9/PDD6t27t5xOp2688UYNGzasLl4WAABoYmoUfFauXHnOstGjR2vQoEHauXOnunfvrpYtWxptISEhysjI0LZt21ReXq74+Hj5+/9n00lJSdq8ebOys7PVpk0bI/RUSE9P13333ae9e/cqNjZWYWFhRlvr1q21du1aZWVlyWazKS4uriYvCQAAmECdfldXZGSkIiMjK22zWCwXDCWhoaHq27fveds7dOigDh06VNoWEBCgXr16Va9YAABgOk3rrkQAAAAXQPABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACmQfABAACm4e/rAgAATVNEaKCirgr3dRlV0qpFc0lnakbTRvABANSLqQ/cIJutcf2ZmfrADRo361MdPu70dSmoJ43rHQkAaDRsNn/9tG6eyo/s83UpVWK7rI1a3fmYwoJtBJ8mjOADAKg35Uf2qbxgl6/LAAxMbgYAAKZB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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(train['issueDateDT'], label='train')\n",
    "plt.hist(testA['issueDateDT'], label='test')\n",
    "plt.legend()\n",
    "plt.title('Distribution of issueDateDT dates');\n",
    "#train 和 test issueDateDT 日期有重叠 所以使用基于时间的分割进行验证是不明智的"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:37.207795400Z",
     "start_time": "2024-09-26T13:41:37.072891700Z"
    }
   },
   "id": "7d55b27ce10b11ae",
   "execution_count": 377
  },
  {
   "cell_type": "markdown",
   "source": [
    " ## 特征工程"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "b2490a378f404ac5"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import datetime\n",
    "from tqdm import tqdm\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.feature_selection import SelectKBest\n",
    "from sklearn.feature_selection import chi2\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import xgboost as xgb\n",
    "import lightgbm as lgb\n",
    "from catboost import CatBoostRegressor\n",
    "import warnings\n",
    "from sklearn.model_selection import StratifiedKFold, KFold\n",
    "from sklearn.metrics import accuracy_score, f1_score, roc_auc_score, log_loss\n",
    "warnings.filterwarnings('ignore')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:37.211467Z",
     "start_time": "2024-09-26T13:41:37.207795400Z"
    }
   },
   "id": "5e4fb0a42be90735",
   "execution_count": 378
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "numerical_fea = list(train.select_dtypes(exclude=['object']).columns)\n",
    "category_fea = list(filter(lambda x: x not in numerical_fea,list(train.columns)))\n",
    "label = 'isDefault'\n",
    "numerical_fea.remove(label)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:37.297509700Z",
     "start_time": "2024-09-26T13:41:37.211467Z"
    }
   },
   "id": "aeaa74b4fec9793c",
   "execution_count": 379
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                        0\nloanAmnt                  0\nterm                      0\ninterestRate              0\ninstallment               0\ngrade                     0\nsubGrade                  0\nemploymentTitle           1\nemploymentLength      46799\nhomeOwnership             0\nannualIncome              0\nverificationStatus        0\nissueDate                 0\nisDefault                 0\npurpose                   0\npostCode                  1\nregionCode                0\ndti                     239\ndelinquency_2years        0\nficoRangeLow              0\nficoRangeHigh             0\nopenAcc                   0\npubRec                    0\npubRecBankruptcies      405\nrevolBal                  0\nrevolUtil               531\ntotalAcc                  0\ninitialListStatus         0\napplicationType           0\nearliesCreditLine         0\ntitle                     1\npolicyCode                0\nn0                    40270\nn1                    40270\nn2                    40270\nn3                    40270\nn4                    33239\nn5                    40270\nn6                    40270\nn7                    40270\nn8                    40271\nn9                    40270\nn10                   33239\nn11                   69752\nn12                   40270\nn13                   40270\nn14                   40270\nissueDateDT               0\ndtype: int64"
     },
     "execution_count": 380,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#查看缺失值情况\n",
    "train.isnull().sum()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:37.398892500Z",
     "start_time": "2024-09-26T13:41:37.290014800Z"
    }
   },
   "id": "c42ab78a1ff37a22",
   "execution_count": 380
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "#按照平均数填充数值型特征\n",
    "train[numerical_fea] = train[numerical_fea].fillna(train[numerical_fea].median())\n",
    "testA[numerical_fea] = testA[numerical_fea].fillna(train[numerical_fea].median())\n",
    "#按照众数填充类别型特征\n",
    "train[category_fea] = train[category_fea].fillna(train[category_fea].mode())\n",
    "testA[category_fea] = testA[category_fea].fillna(train[category_fea].mode())"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:38.907045100Z",
     "start_time": "2024-09-26T13:41:37.398892500Z"
    }
   },
   "id": "69af4fb41b4fcd4e",
   "execution_count": 381
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                        0\nloanAmnt                  0\nterm                      0\ninterestRate              0\ninstallment               0\ngrade                     0\nsubGrade                  0\nemploymentTitle           0\nemploymentLength      46799\nhomeOwnership             0\nannualIncome              0\nverificationStatus        0\nissueDate                 0\nisDefault                 0\npurpose                   0\npostCode                  0\nregionCode                0\ndti                       0\ndelinquency_2years        0\nficoRangeLow              0\nficoRangeHigh             0\nopenAcc                   0\npubRec                    0\npubRecBankruptcies        0\nrevolBal                  0\nrevolUtil                 0\ntotalAcc                  0\ninitialListStatus         0\napplicationType           0\nearliesCreditLine         0\ntitle                     0\npolicyCode                0\nn0                        0\nn1                        0\nn2                        0\nn3                        0\nn4                        0\nn5                        0\nn6                        0\nn7                        0\nn8                        0\nn9                        0\nn10                       0\nn11                       0\nn12                       0\nn13                       0\nn14                       0\nissueDateDT               0\ndtype: int64"
     },
     "execution_count": 382,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:39.028733800Z",
     "start_time": "2024-09-26T13:41:38.908068Z"
    }
   },
   "id": "b7316d5a06dd59a2",
   "execution_count": 382
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "['grade', 'subGrade', 'employmentLength', 'earliesCreditLine']"
     },
     "execution_count": 383,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "category_fea"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:39.032452500Z",
     "start_time": "2024-09-26T13:41:39.028733800Z"
    }
   },
   "id": "d8f7ee175b840683",
   "execution_count": 383
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 时间格式处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "72ad9f79c006a890"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "#转化成时间格式\n",
    "for data in [train, testA]:\n",
    "    data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d')\n",
    "    startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')\n",
    "    #构造时间特征\n",
    "    data['issueDateDT'] = data['issueDate'].apply(lambda x: x-startdate).dt.days"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:43.863584200Z",
     "start_time": "2024-09-26T13:41:39.032452500Z"
    }
   },
   "id": "b4d0add4d49ea32e",
   "execution_count": 384
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "employmentLength\n1 year        52489\n10+ years    262753\n2 years       72358\n3 years       64152\n4 years       47985\n5 years       50102\n6 years       37254\n7 years       35407\n8 years       36192\n9 years       30272\n< 1 year      64237\nNaN           46799\nName: count, dtype: int64"
     },
     "execution_count": 385,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['employmentLength'].value_counts(dropna=False).sort_index()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:43.901706400Z",
     "start_time": "2024-09-26T13:41:43.865178800Z"
    }
   },
   "id": "ae73f02127e6ebbd",
   "execution_count": 385
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 对象类型特征转换到数值"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "5d130f3b83b83a5"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "def employmentLength_to_int(s):\n",
    "    if pd.isnull(s):\n",
    "        return s\n",
    "    else:\n",
    "        return np.int8(s.split()[0])\n",
    "for data in [train, testA]:\n",
    "    data['employmentLength'].replace(to_replace='10+ years', value='10 years', inplace=True)\n",
    "    data['employmentLength'].replace('< 1 year', '0 years', inplace=True)\n",
    "    data['employmentLength'] = data['employmentLength'].apply(employmentLength_to_int)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.278672600Z",
     "start_time": "2024-09-26T13:41:43.889042600Z"
    }
   },
   "id": "41223cd3d5f98d34",
   "execution_count": 386
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "employmentLength\n0.0     15989\n1.0     13182\n2.0     18207\n3.0     16011\n4.0     11833\n5.0     12543\n6.0      9328\n7.0      8823\n8.0      8976\n9.0      7594\n10.0    65772\nNaN     11742\nName: count, dtype: int64"
     },
     "execution_count": 387,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['employmentLength'].value_counts(dropna=False).sort_index()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.290463400Z",
     "start_time": "2024-09-26T13:41:47.278672600Z"
    }
   },
   "id": "4a785e2dd2955c",
   "execution_count": 387
  },
  {
   "cell_type": "markdown",
   "source": [
    "对earliesCreditLine进行预处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "d604414e22c0d4da"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "69814     Aug-1998\n355378    Nov-1998\n229147    Aug-2010\n20481     Mar-1999\n451585    Nov-1999\nName: earliesCreditLine, dtype: object"
     },
     "execution_count": 388,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['earliesCreditLine'].sample(5)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.304279600Z",
     "start_time": "2024-09-26T13:41:47.285179300Z"
    }
   },
   "id": "5d02d0a69b3751d6",
   "execution_count": 388
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "for data in [train, testA]:\n",
    "    data['earliesCreditLine'] = data['earliesCreditLine'].apply(lambda s: int(s[-4:]))"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.633729400Z",
     "start_time": "2024-09-26T13:41:47.305279700Z"
    }
   },
   "id": "30dfae279da8f070",
   "execution_count": 389
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 类别特征处理"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "57d61c900d10dc27"
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "grade 类型数： 7\n",
      "subGrade 类型数： 35\n",
      "employmentTitle 类型数： 79282\n",
      "homeOwnership 类型数： 6\n",
      "verificationStatus 类型数： 3\n",
      "purpose 类型数： 14\n",
      "postCode 类型数： 889\n",
      "regionCode 类型数： 51\n",
      "applicationType 类型数： 2\n",
      "initialListStatus 类型数： 2\n",
      "title 类型数： 12058\n",
      "policyCode 类型数： 1\n"
     ]
    }
   ],
   "source": [
    "# 部分类别特征\n",
    "cate_features = ['grade', 'subGrade', 'employmentTitle', 'homeOwnership', 'verificationStatus', 'purpose', 'postCode', 'regionCode',\n",
    "                 'applicationType', 'initialListStatus', 'title', 'policyCode']\n",
    "for f in cate_features:\n",
    "    print(f, '类型数：', data[f].nunique())"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.663849800Z",
     "start_time": "2024-09-26T13:41:47.638676400Z"
    }
   },
   "id": "82145d088430ea31",
   "execution_count": 390
  },
  {
   "cell_type": "markdown",
   "source": [
    "卡方检验\n",
    "\n",
    "经典的卡方检验是用于检验自变量对因变量的相关性。 假设自变量有N种取值，因变量有M种取值，考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距。 其统计量如下： χ2=∑(A−T)2T，其中A为实际值，T为理论值"
   ],
   "metadata": {
    "collapsed": false
   },
   "id": "f3494b08a61b333"
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# from sklearn.feature_selection import SelectKBest\n",
    "# from sklearn.feature_selection import chi2\n",
    "# #参数k为选择的特征个数\n",
    "# SelectKBest(chi2, k=5).fit_transform(train,target_train)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.667441700Z",
     "start_time": "2024-09-26T13:41:47.663849800Z"
    }
   },
   "id": "67f9028e493a9e24",
   "execution_count": 391
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:47.671204200Z",
     "start_time": "2024-09-26T13:41:47.667947500Z"
    }
   },
   "id": "d1672456001be3e6",
   "execution_count": 391
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "<Axes: title={'center': 'Correlation of Numeric Features with Price'}>"
     },
     "execution_count": 392,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 700x700 with 2 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAKWCAYAAABAuvEQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1wUR//A8Q8dRFGwUuzmOaMGRDH2hoklWNHEElFjiwWT+GjssfdYA2oSY4m9JMSKvaYoYAuW2BvFLkrv9/uDn/d4AWWQEwW+79frXnq7352Z3dtb5mZnZ4y0Wq0WIYQQQggh8gHjN10AIYQQQgghcopUfoUQQgghRL4hlV8hhBBCCJFvSOVXCCGEEELkG1L5FUIIIYQQ+YZUfoUQQgghRL4hlV8hhBBCCJFvSOVXCCGEEELkG1L5FUIIIYQQ+YZUfoUQQgghRL4hlV8hhBBCCGFQDx8+ZNCgQbi6uuLp6cnFixeVtrt+/TpeXl5Ur16dOnXqMGHCBOLj4w1aNqn8CiGEEEIIg9FqtXh7exMREcGvv/6Kl5cXgwYNIiYmJtNtBw8eTKNGjdi3bx8//PADx48fx9fX16DlMzVoakIIIYQQIs9o1qzZS9cfOHAg3bJTp05x+vRpdu/eTfny5alQoQI7duxg//79tGvX7oVpPXnyhOvXr/Ppp59SoEABihcvTtOmTbl27Vq29+N5UvkVQgghhMhFkh5ef9NFeKkLFy5QunRpypcvr1vm6upKcHDwSyu/RYoUwcHBgeXLl9O7d29CQkLYvXs3gwYNMmj5pPIrhBBCCCEylFHLbmaioqIoW7as3rLChQtz4cKFTLedPn06vXv3xsfHBwAPDw8+/vjjLJfhZaTPrxBCCCFEbpKaknOvV2Bqaoq5ubneMktLS+Li4l66XVxcHGPHjmXgwIEEBgaya9cuHjx4wNSpU1+pHC8ilV8hhBBCCGEwtra2PHz4UG9ZdHR0ugrxvx07dozo6Gi++OILChcuTIUKFRgxYgQbN24kOTnZYOWTyq8QQgghRG6iTc251yuoUaMGFy9eJDIyUrcsODgYe3v7l26XkpJCdHS0Xgvx48ePSUlJQavVvlJZMiKVXyGEEEIIYTAVK1akUqVKzJs3j9TUVIKDg9m3bx/u7u6kpqYSGRlJSkr6LhXOzs6Ym5szfPhw/P39WbVqFePHj6dZs2aYmZkZrHxGWkNWpYUQQgghxGuVdOefHMvLzP7dV9ru4sWLDBgwgLi4OKKioujYsSNTpkwhNDSUZs2asWXLFt59N33af/31FwsWLODq1atotVqaNm3KuHHjsLOzy+6u6EjlVwghhBAiF8kNlV9Ie4Dt5MmT2NnZUaVKFQOWKnuk8iuEEEIIkYskhp/PsbzMHarmWF45Rfr8CiGEEEKIfEMqv0IIIYQQIt+QGd6EEEIIIXKT1FcbgkykkZZfIYQQQgiRb0jLrxBCCCFEbvKKk0+INNLyK4QQQggh8g1p+RVCCCGEyE1S08+OJtRJy68QQgghhMg3pOVXCCGEECI3kT6/2SItv0IIIYQQIt+Qll8hhBBCiNxExvnNFmn5FUIIIYQQ+Ya0/AohhBBC5CJa6fObLdLyK4QQQggh8g1p+RVCCCGEyE2kz2+2SMuvEEIIIYTIN6TlVwghhBAiN5E+v9kiLb9CCCGEECLfkJZfIYQQQojcJDXlTZcgV5OWXyGEEEIIkW9I5VcIIYQQQuQbUvkVBnXkyBG6deuGq6srtWvXZtiwYYSFhb3pYhmUl5cXGo3mjZbBz88PjUaDn5/fGy3H63L//n1GjRpFgwYNqFKlCg0bNuTHH3/McjqhoaFoNBo0Gg3Hjh3TWxcQEIBGo8Hd3d1QxX7j3N3d38j+PDvGL3uFhobmeLlE1jz7vowaNeqtSuvf/n1uvfvuuzRo0IBRo0YZ7O/NW3+N1abm3CsPkj6/wmDWrVvHpEmTsLW1pX379kRGRrJnzx6OHz/Oxo0bcXJyetNFFLmAVqtl8ODBnD9/Hg8PD0qUKEFISAiXL1/OVrqrVq2ibt26BiqlyMiAAQNeuM7GxiYHSyLyg2fnW1RUFGfPnuW3337j8OHDbN68mdKlS7/h0om3mVR+hUHcvHmT6dOnY2dnx6+//oqDgwMAH374IV9++SUzZ87E19f3DZfy7eXn58fo0aOZMWMGnp6emcZ/+OGHuLi4UKJEiRwoXc66desWwcHBeHp6MmPGDN3y1GwO6n748GFCQkLy9B/FlStXvtH8hw4d+kbzf+ZZ6/fBgwffcElyl5IlS+Lv70+hQoUyjX0bjvG/z7elS5cyZ84cZs+ejY+PT7bSfuuvsTLJRbZItwdhECtXriQpKYk+ffroKr4ALVq0wN7enkOHDhEXF/cGS5i3FCpUiIoVKyr9kcpt7t+/D6B3HgEYG2fvcpWamsrq1auzlcbbrkyZMpQpU+ZNF0PkUmZmZlSsWPHtrfBlokePHpiZmXH06FGSkpKylVZevsYKqfwKAzl06BAATZo00VtuZGREuXLlSE5O5saNG2+gZCK30Wq1Bk+zWLFiFClSBD8/P2JiYgyevhDizbOwsMDW1pb4+HgiIiLedHFeL+nzmy1S+RXZ9vTpU+7evYuxsTHlypVLt97b25vZs2dTqlQp3bKEhAR8fX1p3rw51apVo0mTJsycOZPIyMh02/v4+KDRaAgICCAxMZGlS5fSvn17GjdunC72+YcUUlNT2bBhA507d8bNzY2oqKh08cePH6dPnz64ubnh7OzMxx9/zP79+7N3QIB//vkHb29vGjZsSPXq1fnoo4/44YcfSExMTFdWjUbD6NGjARg9erRu2cseXFJ5GCM1NZVVq1bRpk0b3nvvPerXr8/YsWO5d+/eC9O6evUqn3/+OW5ubtSpU4dhw4bx+PHjbB2Lv//+m/79+1OzZk2qV69O9+7d+f333/Vinj18ptFo6NGjBwC+vr56D7Vkh4WFBV26dCEqKorffvvthXGjRo164cNZzz9M9uyY/fzzzwwbNozq1avToUMHQkJCmDx5Mq6urnz44YecOHFCL409e/boHgitXr06PXr0SBcD/zsez27d+vv706NHD2rXrs3FixdfWH6VB96uXLnCF198Qe3atXF1daV9+/asWbOG5OTkl25nSElJSfz444+0bt2a995776UPxyYmJrJ8+XLatGlD9erVadCgAf379+fChQt6ce7u7rpzJSwsjLCwML3z5/nvyssexnrRd0uj0eDl5QVAcHAwQ4cOpWHDhhneTXj48CGTJ0+mSZMmVKtWjaZNm/Ltt98SHx+fLjY8PJwxY8bg7u6Os7Mz7u7uTJ48+ZW/dzNnzkSj0ejOq7Vr16LRaBgyZAiQdl1wcXGhffv26bbN7CG1rBzj50VFRTFhwgQaNGiAq6srn376Kf/8888r7V9mEhISALC0tNQte/4h5Xv37jFt2jQ+/PBDvvrqqxemo3KNTUlJYeXKlbrzuGnTpnz55Zdcu3Ytw3jV7794/aTPr8i2O3fuAFCkSBFMTdOfUm5ubri5uenex8fH06tXL06fPs27775Lly5dOH/+PCtWrODQoUOsX78eOzu7dOlER0frYitXrkyFChVeWKbk5GT69+/P77//TsWKFalQoUK62+abN29m/PjxFC9enLZt25Kamsq+ffsYPHgw06dPp2PHjq90PM6dO4eXlxdarZaWLVtSpEgRzp49y7x587h//z7ffPMNAJUrV9Y9sHHp0iUOHTpE06ZNdRfpwoULv1L+kPYH7ssvv2Tv3r2ULVuWjz/+mFu3bvHLL79w+PBh1qxZQ/ny5fW2uXLlCtOnT6dChQp4enryxx9/sGPHDmJiYvj+++9fqRy7d+9m+PDhmJiY0Lx5c8zNzdm7dy/9+vVj9OjR9OzZE0jr4vDsWISHh7Nt27Z05012devWjWXLlrF69Wo+/fRTg6S5YMECatSoQfXq1Tl27BidOnWiePHitGzZEj8/P+bPn8/atWsBWLhwIYsXL6ZcuXJ06tSJmJgY9u7dS8+ePVm6dCn16tXLMI9x48bpHuApW7as3h/1rDp+/DgDBgwgMTGRDz74gFKlSnHs2DGmTJnC8ePHc6RfflJSEv369ePYsWPUqlWLBg0aEBoayq5duwgICOC3336jePHiuviRI0fi7+9P1apV6dKlC9HR0ezatYvu3buzdetWXR/u7t278/TpUwDdMX/+c65cubJByu/n58c333xDoUKFKFOmDEWLFtVbHx4eTteuXXn06BHu7u44ODhw5swZfvrpJ86ePcvKlSt116KoqCi6d+9OeHg47u7ulCtXjtDQUNatW0dwcDCbNm3KcncfFxcXAK5du4abm5vuQdFn/4aFhREfH4+zs3OW9/1VjnFsbCzdu3cnMjKSVq1aceXKFY4dO0a/fv3YvXs3BQsWzHI5XuTatWs8ffqU0qVLZ/iA5YULF+jTpw/R0dFUrlwZR0fHV84rJSWFwYMHc+jQIcqVK0fnzp2JiIhg3759HDp0iNWrV+s+C3j17/8LSZ/fbJHKr8i22NhYIK11TYWPjw+nT5/G09OTqVOnYmJiAsC8efP44YcfmDJlCvPnz0+33YwZM7CxsWHXrl0vrfgC/Pjjj2i1WjZv3pzhRf7evXtMnjyZMmXKsHnzZt2FcsCAAbRq1Yr58+fTvn17XdmyYuXKlSQkJLBgwQKaN2+uW96pUyc2b97MmDFjMDExoUqVKlSpUgVI+4N66NAhmjdvrvTAW2Y2bNjA3r17qV+/PkuWLNF9Nhs3bmT8+PGMHDmSTZs26W2zYsUKunfvztixYzEyMiI2NpbmzZtz+PBh4uLisLKyylIZHj9+zOjRozE1NWXjxo26Sv3gwYP5+OOPmTlzJvXq1eOdd96hdOnSuodXAgIC2LZtG3Xq1NG1VhlCyZIladWqFdu2bePo0aPZqkQ+4+zszLJly7h48SLt2rUD0kY9sbGx4cCBA7ofhsHBwSxevBg3NzdWrFiBubk5kFZx8PT0ZO7cuRn+8du6dStRUVH89NNPNGzYMFtljY+PZ/jw4SQkJPDzzz/z/vvvA2ktq506dWLfvn0EBwe/UqXomYxa6P/9EOeqVas4duwYffv25euvv9YtX7lyJTNmzGD58uWMHDkSSHuQdu/evVStWpVNmzbpflx/+OGH9O/fn507d+p+NPXu3VuX1vbt2wHDP4B369YtJk6cyNdff023bt10n+PzJk2axN27d/nxxx/17k4NGjSIAwcOcPToUV33sICAAMLCwujYsSPTp0/Xxc6ePZvdu3cTGhqa5T7c1atXB+Dq1atA2o/a+vXrc/z4cRISEnStks9XzFS9yjHeu3cv1atXZ926dVhbWwNp19lDhw5x6tQpGjVqlOVy/FtkZCTnzp3TPSDbq1evDOO++OILGjVqxKhRo7C1tc1WnmvWrOHQoUM0btwYX19f3bng7+/P0KFD8fX1ZenSpcCrf//F6yOVX5FtRkZGQNov4cxotVr8/PwwMzNj9OjRepXLIUOG4Ofnx549e4iKikr3oEF0dDQbN25M19KSkXv37rFlyxYqVqyY4fpdu3aRmJhIiRIlWLZsmd66woULc+fOHa5evfpKt9vnzJnDnDlzdO8TExMJDAzkyZMnJCQkcP/+fezt7bOcblb88ssvQFo3iud/lHTu3JmNGzfy999/c+XKFd555x3dOkdHR0aMGKH7PAsUKEDNmjXZvXs3jx8/znIrib+/P7GxsfTu3VvvODo4ODBw4ECmTJmCn5+frqKTE3r16sW2bdtYtWoV/fv3z3Z6zZo1A9C1XtWqVUv3Q+r5Fq1nFYXChQuzaNEivTQKFizI+fPnMzznQ0JCWLlypUGGaPvzzz958OABHh4euoovgLm5OdOmTeP27dt6La6vIqOhzv7dGrht2zYg7fb08z9yn3VLCggI0C0rV64c58+f19s+LCyM48ePA3D79u1slTer7t27x6BBg15YuXry5AlHjx6lcOHCnDp1ilOnTunWPRut5Pjx47rKb7FixYC0/YiOjtadMyNGjGDEiBGvVEZ7e3tKlCjB9evXgbRK8Lhx4/jrr7+4du1atiq/r8LY2JipU6fqKr4ADRs25NChQzx69Chbaf/7+mxkZESPHj1eeGfH3t6eGTNmZPvhWYAtW7YAaV2lnv8R1KxZM+bNm2eQ7//LaLUyvXF2SOVXZNuzL2xGfWoBvvzyS/bt28e6desoXbo0jx8/ply5culuS5mZmfGf//yHP//8kxs3bqRrgRowYIBSxRfSKnkvqvhCWosSQGBgIIGBgRnG3Lt375X7mh47dozdu3dz6tQpbty4QVJSkq6ir/IjIbuuXbuGubl5hsegatWqnD9/nqtXr+pVflu0aJGuJetZa++rPIT2rOXpWev2854te1HfuNelatWq1KpViz///JMPPvggS9umpKSkuxPw71u2L7qF++x8O3DgAAcOHMgw5v79++n++Lm7uxtsbOJnlaGMzun33nuP9957L9t5qLS0PjsWLxp549990qOioti4cSMBAQGcP3+eR48e6T6H7A5/l5GXfT+LFi360rGMb9++TWpqKk+fPn1hV6Hn96969ep4eHiwc+dOGjRoQOXKlXn33XepX78+TZs2faU7T5BWsT179iz37t3j6dOnuLq64ujoyOXLl7l27RoFCxbM9O6ZoVSpUoVKlSrpLcvOdeV5zz4LExMTihYtSr169dJ153re6NGjDVLxhbTvk4WFRbr8LCws8PDw0Fv2qt9/8fpI5VdkW5kyZTAzMyMuLo4HDx6kaz16/PgxKSkpSoPcP7sYPmt9fN67776rXKaMKlwZ5bNo0aIsV4IyM3v2bJYtW0bZsmVp1KgRvXr1onr16ixduvSlD1sZWkbHEF58jMuWLZtj5XjZ5/y69erVi6CgINasWaO8TWJiIg8ePNB7aDMrnu3v1q1bs9T3NLPz+FXKkJGUlBTi4+MxMzPL8Fa+IWm1WmxsbAgKCso0NjQ0lE8++YSnT5/SuHFjevbsSZUqVShVqhStW7d+LeV72QxhFStWfGn3rmfH+IMPPkjXwvci8+bNo0ePHhw7doxLly6xd+9e1q1bh6urK6tWrXqlz8PZ2Zl9+/Zx+vRprK2tcXJyQqPRcOXKFa5fv46zs7PBKoGZeV3XFch6txZDfp9eJj4+npSUFAoUKICRkdErf/9fKo+OwpBTZLQHkW3m5ubUqFEDSLu1+ryUlBQuX76MlZUVZcuWxc7ODjs7O8LCwtKN7JCUlMSVK1cwMTHJcNQIQ3r2az2jlsfAwEDWrFmjaynLivv377Ns2TIqVqzIzp07GTduHB07dqRixYq6vtEZMfQfoooVK+r173ves6fk/90qbGZmZtAyPGvt+fdt6+fLkFOtT89zd3enTJkyupbp572oC09QUFC2WuyfnW8Z5Xno0CHWrFmjG9/4dXn2eV+6dCnduu3bt1OjRg1mz579WssAacciMjIyw/3dsGED69at073/8ccfefToEdOnT2fx4sV8/vnnSn2fM/tR9Wx9RiNcPOtS8SrKli2LkZFRhp/zo0ePWLNmjd5oMqGhoZw9e5YqVaowcOBAFixYwJEjR2jZsiWnT5/G39//lcrxrN/v7t27+c9//oORkRH/+c9/uHLlCteuXctWv+5nVH+4Gvq68raoUKECCQkJGQ7h6eHhQY0aNXR/496G77/QJ5VfYRDPntpfvHgxT5480S1fsWIFT5484cMPP8TExAQjIyM8PT1JSkpixowZehUKHx8fHjx4QIsWLV777Z+WLVtiZmbG+vXruXv3rm55TEwMY8eOZcqUKa90S/Xhw4dA2u3R5y/6W7ZsYd++fS/c7ll/2pCQEL3lrzr8VKdOnYC0h42eDf0DaQ+8nT9/HhcXF70uD6/DRx99RIECBVi/fr1ehSs8PJzvv/8eY2Njgzzcl1XGxsa6Iav+7dkoI1euXNEtS0xM1OvD/SratGkDwLJly/R+9N2/f58RI0Ywa9as197iWr9+fYoXL87u3bv1uvqkpKSwdetWAOrUqfNaywD/Oxbfffed3vf/yJEjTJgwQe/uyIMHDwD0WtwfPXqkGzHlRRwdHXn06JHeD87U1FRdC5ydnR1GRkZ6nzOk9VM/ffr0K+5Z2og3jRo14ubNm7o+oc8sX76cKVOm6KW/YcMGOnXqpBsnHcDU1FT3Q+VV+8RWq1YNExMTdu3axX/+8x8A/vOf/3DkyBEiIyMN0t83s2Oc1z17wHXmzJl6Q1gGBgYSFhZG5cqVdSP2vJbvf2pqzr3yIOn2IAyiWbNm9OjRg1WrVtG2bVuaN29OSEgIhw8fpnjx4gwbNkwXO2TIEE6ePImfnx///PMPbm5unD9/nlOnTlGuXLlM/7AZQqlSpRg3bhwTJ07Ew8ODDz/8kEKFCnH48GFu375Njx490vVTU1GpUiXs7e0JDAxk8ODBODk5ceLECc6dO0fhwoV5+vRphn2jXVxcqFixIsuWLePRo0cULFiQa9euUaFChVd6IKxLly4cO3aMvXv30rZtWxo0aMCtW7f4/fffKVasGLNmzcpymlllZ2fHjBkzGDZsGJ988oneUGeRkZGMGTPmtVfAX6Rjx45899136T6L5s2bs2zZMmbOnKnrArBo0SJMTEx0Dye9CmdnZwYMGMD3339Pq1ataNq0qd6xGD16NEWKFMnmXr2cpaUls2fPZuDAgXz22Wd88MEHFC9enOPHj3PlyhXc3d11D/C9Tj169ODIkSNs3ryZv//+m9q1axMZGcnu3buxsrLSjXkNaQ9GHTx4kK+//pqWLVvy+PFjDh06pOsLm9G44ACenp4EBATg5eVF7dq1iY6O5o8//mDLli3Y2NhgZWVFo0aNOHLkCLNmzaJVq1acOHECHx8fGjduzJEjR155/8aPH0/Xrl0ZOXIkW7duRaPRcPXqVX7//XfKlClD3759dbEdOnRgzZo1jBw5kj179mBvb8+dO3fYu3cvlpaWmY7Z/CIFChTgnXfe4eLFi7o+3s/39TZE5TezY5zXde/enT///JMjR47Qpk0bGjZsSEREBHv27MHc3Jzx48frYt+G77/QJ5VfYTBjx47lvffeY9WqVWzatAkrKyvatWvHf//7X72WG0tLS37++WeWLl3Ktm3b2LBhA8WKFaNXr14MHjw4xy6cXbp0oWzZsixdupR9+/ah1Wp55513GDp0KB999NErpWlubs7y5cuZO3cuJ06c4I8//qBy5crMnz+fGzdu8N1337F79+50/ZfNzc1ZunQps2fPZt++fURGRlKyZElatmz5SuUwNjZm4cKFrFmzhk2bNrFx40YKFy5Mp06d+OKLLyhZsuQrpZtVLVu2xN7eHl9fXw4cOEBqairVqlWjf//+Bhni6FVZW1vz8ccfs3z5cr3lLi4uzJkzh8WLFzNkyBDs7Oxo1aoVQ4YMyXYf06FDh1K5cmV+/vlnduzYgbm5Oe+++y6zZs2ifv362UpbVb169di0aRO+vr4cO3aM2NhYypYty4gRI+jZs2eO9ME2Nzdn2bJlrFixgq1bt7Jx40ZsbW358MMP8fb21nuAqFu3biQmJrJhwwbWr19PkSJF8PDwoF+/frRt25bAwEAeP36cblzw9u3bk5iYyKpVq1i9ejVmZmZUrVpVr3VtxowZuhFHNmzYQNWqVVmyZAnh4eHZqvw6OTnh5+fHokWLOHToECdOnMDBwYG+ffvSv39/vfG7K1asyObNm/npp584ceIE+/fvx8bGhqZNmzJw4MCXPryVGRcXFy5evKhr+S1XrhwWFhYUK1ZM+cHhl1E5xnmZqakpS5YsYdWqVfz6669s2LABa2trmjZtire3d7oHSw3+/Zc+v9lipM0v9yiEEEIIIfKA+JNbciwvy5rtcyyvnCItv0IIIYQQuUmqjPObHfLAmxBCCCGEyDek5VcIIYQQIjeRPr/ZIi2/QgghhBAi35DKrxBCCCGEyDek24MQQgghRG6SRyefyCnS8iuEEEIIIfINafkVL+Xu7o63t/dLp6HVaDSsWrWK2rVrv1IeSQ+vK8d+7zo+8yAhRJ7Q5dQSvffGxkbY2Vnz+HEMqan/G6J+Q42BOV00IfQMCVmTsxnKA2/ZIpVf8VLbtm3LNzP2CCHebsbGRhgZGWFsbKRX+RVCiKyQyq94qYIFC77pIgghhBDiedLnN1ukz694KXd3d/z8/PSWrV69miZNmlCrVi2WLl36hkomhBBCCJF10vIrsuTPP/9kxowZfPvttzg7OzN+vPTBFUK8Hqam+u0zJibGev8KkW9Jy2+2SOVXZMmOHTuoX78+Hh4eAIwePZo2bdq84VIJIfIiW1vrDJfb2FjlcEmEEHmJVH5Fljx48AAnJyfd+7Jly77B0ggh8rKIiBi99yYmxtjYWBEZGUdKirR8ifxLq01500XI1aTyK7KkePHi3L17V/c+NDT0DZZGCJGXJSdnXMFNSUl94TohhMiMdJwSWdKiRQv++OMP9uzZQ0hICLNmzXrTRRJCCCHyl9TUnHvlQVL5FVnSpEkThg0bxrRp0+jSpQvOzs5vukhCCCGEEMqk24N4qYMHD6Zb9tlnn/HZZ5/p3nt7e2crj6zM2jbg9GSluNiv+yvFBe8qohRX59xspbiFNdT25YJxvFLcbM0DpbhHtwooxf0VVVQp7rBZnFJcVa36g0dminMS2Cg2NEQr/nR/JyFZLVCRg2WsUtxmI7UxsmNR2+GxmjtKcSfO2CvFlSkYpRQHsC6lsFJc9QQjpbjr5mpxqp4Yq51c7YwileKi4i2yU5x07AqpnTPJySbKaV6JK6QUV9pE7busKjFFrYwFzJOU4v7Qqu2HKsVTUFnRt7Vrrczwli3S8iuEEEIIIfINafkVQgghhMhN8mhf3JwiLb9CCCGEECLfkJZfIYQQQojcRPr8Zou0/AohhBBCiHxDKr9CCCGEECLfkG4PQgghhBC5iTzwli3S8iuEEEIIIfINafkVQgghhMhN5IG3bJHKr8hVVGduK/Dtj0px1Qt/qRR3vNoIpTgLM0uluGKYKcXtPltaKc4hJVEp7onixFXFMVeKK5iF669qaIFUtdm6Io3VpnK6Zm7Yy1xMotqMVLZmauUrpngD7nCwk1JciuL9vBvRNmqBQJSV2qcXbax2rBUnZFNWQKt2rM8kq81UZ2zge6LXYtWuC1k5LhZGasGXtNZKcaoTo2kVj41FkuLFxsC1ENU58lSvXU/UJ90TuYh0e8jjfHx88PLyetPFEEIIIYShpKbm3CsPksqvEEIIIYTIN6Tym0fNmTMHjUaDr68vgYGBaDQaNBoNZ8+eBSA4OJhu3bpRo0YNPD09CQ4O1m0bGhqKRqPhxo0bzJs3j8aNG+Pv7w+Al5cX//3vf2nbti0tWrTg119/pVGjRnTo0IG4uLg3sq9CCCFEviItv9kild88asiQIQQFBdGvXz9q1KhBUFAQQUFBVKlShXv37tGrVy/ee+89/P39adiwIX379iUqKkovjfHjx3Pnzh2mT59O7dq1dcvPnz/Pt99+y4MHD/jll1/w9fXlwoUL/PPPPzm9m0KIPMzU1FjvZWKS9ifLxER/uRBCZIU88JZHWVhY6F6mpqbY2Pzv4ZatW7diaWnJiBEjMDExYciQIaxcuZLff/+djz76SBdXokQJvv3223Rpf/jhh2g0GooUKULbtm1xdnYGICkp6fXvmBAi37C1zfhhLRsbqxwuiRBvGRntIVuk8psPhYeH8+TJE73W3MTEREJDQ/XiPv/88wy3t7CwyPD/QghhSBERMXrvTUyMsbGxIjIyjpQU+eMvhHg1UvnN44yMjNBq9YfEcXBwoEqVKixYsEC3LDY2FltbW724AgUK5EQRhRAiQ8nJGVdwU1JSX7hOiHwhj/bFzSnSWSqPq1ChApcuXeL69euEhIRw8uRJ2rZty+3btwkMDMTMzIxr167RtWtXAgMD33RxhRBCCCFeK6n85nEtW7akTZs2dO7cmdatW3Pw4EFKlSrFTz/9xObNm2nZsiWTJk3C29sbDw+PN11cIYQQQmRGm5pzr1f08OFDBg0ahKurK56enly8eDFL28fHx9OiRQuWLVv2ymV4ESPtv++JC5HDfEp3V46tnhSvFtclQSnOctxCpbig975WigtBbSanJCO1+ZTOm6tdeAbY3VeK2/KwlFLcA2O1fEupTicGqF5oaih+xjeM1Y71F1EBijmrmWBbO/MgoGiyWnomikcmRHHGuE42aufC2sjiSnEA9eLVdibEVG3mwgTF6cQ8Ty/Re29qaoytrTURETF63R52VR9o0HxLGLhLxd8WahnHGKnnWzZFbeqxJMV9jlCcMc41QS3uurnatcFM8cKg2kfTRDG9+hYRSnH7kmwzDwK+vL1GLWMDids6O8fysmqnNsPp87RaLV27dsXIyIhp06bx999/4+Pjw/bt27G2Vpt1cOrUqZw+fZpNmzZhYmLYqfakz68QQgghRG7ylvf5PXXqFKdPn2b37t2UL1+eChUqsGPHDvbv30+7du0y3f7YsWNs3LiRX375xeAVX5DKrxBCCCGEeIFmzZq9dP2BAwfSLbtw4QKlS5emfPnyumWurq4EBwdnWvmNjo5mzJgx1K5dm+DgYKKionBzc3u1wr+A9PkVQgghhMhN3vI+v1FRUZQtW1ZvWeHChblz506m2y5atIg7d+5QrFgxQkNDGT16NN7e3qQasLVbWn6FEEIIIUSGMmrZzYypqSnm5uZ6yywtLYmLi3vpdomJiWzYsIGePXsyevRoALp3707Tpk3Zv38/zZs3z3JZMiyfQVIRQgghhBA54y3v82tra8vDhw/1lkVHR6erEP9bREQEsbGxel0tihcvjqOjIzdu3DBY+aTbgxBCCCGEMJgaNWpw8eJFIiMjdcuCg4Oxt7d/6XZ2dnbpWogTEhK4f/8+JUuWNFj5pPIrhBBCCCEMpmLFilSqVIl58+aRmppKcHAw+/btw93dndTUVCIjI0lJSUm3nZmZGR4eHsybN4/z588TEhLC+PHjsbCwyPTBu6yQyq8QQgghRG6Smppzr1c0Y8YMDh8+TN26denSpQsdOnSgUaNGhIeHU6tWLS5fvpzhduPHj6dOnToMHDgQDw8Prl27xo8//kihQoVeuSz/Jn1+hRBCCCGEQVWuXJldu3Zx8uRJ7OzsqFKlCgBOTk5cunTphdtZWloyevRo3QNvr4NUfp/j7u6Ot7c3np6eb7ooOn5+fvj6+nLw4MEM13t5efH+++8zZMiQHC7Zm1HnnNqsNserqc1IY7JRbea2Wme/VYo7VmO8Utw140SluIkV7ynFPQm3UoqzSX+XKUOnjNVmyCtorJYvqM/kdNlEbea2GMX7Vj6F1GZkU/WuNkopbptZQaW4aMVZvb4uH64Ud/6CWr+4NpZq+wGw38JGKa5sktqH/FBxtjpVYYp/yVobP1WKi0lVm6lOVSdTte9TQpL6n+TLyWrnVzmjlz9d/4zyVK+K3ztHxRbDY0Zq+6E4YaLydeFAotrMbTZv63NluWRyXisrKxo0aPCmi5GOdHt4zrZt22jdurVB0/Tz88Pd3d2gab4NvLy88PHxedPFEEIIIYTIEmn5fU7Bgmq/QIUQQggh3pi3fKizt520/D7H3d0dPz8/3ftnrbZ//fUXrVq1wtXVlSFDhpCY+L9b1osXL6ZRo0a4uLjQtWtXrl69CsD69evRaDSMHj2asLAwNBoNGo2G3bt367YNDAzE09MTFxcXmjVrxpYtWwyyHxqNhqlTp9KwYUMGDBjAokWLqFWrFmPHjgUgNTWV5cuX8+GHH1KrVi1GjhxJTEwMAKGhoWg0GgICAvDy8sLFxQVPT09u374NwCeffIJGoyEwMBBfX180Gg2urq4GKbcQQgghxOsmld9MRERE8O233zJr1iy+//57Dh06xM6dOwH4888/8fHxYdasWfj7+1OuXDkmTZoEQMeOHQkKCmL8+PHY29sTFBREUFCQbqiO2NhYBgwYQL169Thw4ACjRo1i7NixPHjwwCDlfvDgARMmTODQoUNERkby1VdfsXXrVgDWrl2Lj48P48ePZ9OmTVy6dImpU6fqbT9u3Di6devGli1biImJYcmSJQCsWLGCoKAgatSoQb9+/QgKCuLo0aMGKbMQQjzP1NRY72VikvYny8REf7kQ+U4uGO3hbSbdHjIRGxvLpEmTcHZ2BqBq1aqEhYUBYGFhAaRNx1e8eHGmTZtGcnJat3xzc3PMzc2xsrLC2NgYGxv9B0bMzc3Zs2cPhQsX5ubNm9y5c4fk5GRu3bpF8eLFs13ujh07UqFCBSCttfbhw4ckJSUBsG7dOjp37kzDhg0B6N27NxMmTGDatGm67Tt37kyrVq0AaN68OWfOnAHA2toaSJu60MLCIt1+CSGEodjaWme43MZG/UFLIYT4N6n8ZsLGxkZX8YW0Sqv2/5+ydHNzY8yYMXz33Xd89dVXVKtWjS+//BI3N7dM0zUyMuLHH39k27ZtlCxZkurVqwNkOOjzq3hWMf/3/wHCw8NZv349v/zyiy7P2NhYHj9+rIt5/unMzKYjFEKI1yEiIkbvvYmJMTY2VkRGxpGSkjdbpIRQopXzPzuk8puJlw2qHBISwvvvv4+Xlxfx8fEsWLCAwYMHc+zYMYyN027FGRsb6yrLz9uxYwdbt25lx44dlChRgtjYWDZu3Pja9uN59vb2dOzYUdeyq9VqiY6OxsbGhvj4eCDzh/+MjIwy3C8hhDCU5OSM/8CnpKS+cJ0QQmRGOktlQ0BAAH369CEoKIioqCiMjY113R6eqVChAnfu3CE4OJjw8HCOHz8OQHR0NABRUVFcvHhRN05vTlQou3btyrZt23QtvRs2bKBnz56kZqFvT4UKFQgICODevXtcvnxZ96CfEEIIIV4z6fObLdLymw2enp7cvHmT4cOH8/jxY8qVK8e8efN0rb4Azs7OfPHFF3z++edERUXRokUL6tSpQ/v27fnrr7/o1KkTRYsW5bPPPuPcuXOcO3eOOnXqvNZye3l5kZKSwn//+18ePnxIlSpV+Omnn7C0VJtcAMDb25uRI0fSvHlzLCwsmDp1KpUqVXqNpRZCCCGEyD4jrdy7Fm+YT+nuyrEJihNDWSie1SWS1QJDFWek+uLUZKW47xRnglP9chZQDPzy3iGluIUlmyrFxRl2oi4AoozUdsYCtcxLGKYbvU6YiVr5EhT3w0yrth+FFOMcFM/pm1mYZe2TQmqj0GyKUntY9/MaIUpxKT/u0HtvamqMra01ERExet0efGoNUErPJlVtnw19WqcoJlggC41sT43VPmdjxb1RnYHRRC1M+VptpZiv6qFJUsw3QfHqOvnOYbV8E8PUMjaQuJ9H5VheVj1n5lheOUW6PQghhBBCiHxDuj0IIYQQQuQmebQvbk6Rll8hhBBCCJFvSMuvEEIIIURuIi2/2SItv0IIIYQQIt+Qyq8QQgghhMg3pNuDEEIIIURuItMbZ4u0/AohhBBCiHxDWn6FEEIIIXIRbarMT5YdeabyGxoaSrNmzThw4ABOTk45mvfmzZtZsmQJDx48oGrVqkyaNAmNRpOjZciqUaPSZoeZOfPlM7eoxuWUC8bxSnHFMFOKs01Rm6/omnGiUpzqzG2qM8F96aY2i887qeZKcT6KM7cVUpwV7anaYQbUZ4YqqjgLV4zifasbpoa9PRijONdUxRTDXl4vmyQpxcWaqeV7mVjlvPc9VZu5LVVx1rGfT5ZWilOd+7G44hRqqudMkvLcimrMFGdZe6h4/ACSFWcQVJ1BLUIxb0vFmQYjjNQuIuVT1c5XxcsCVopf9xRjtQRVr5kid8kzld835eDBg0yaNIkJEyZQp04dFixYQN++fdmzZw8FChR408XLtgkTJrzpIgghhBDieTLUWbZIn99s2rBhA82bN+fjjz+mdOnSTJ48mYiICA4fPvymi2YQVlZWWFlZveliCCGEEEIYRJ6r/IaFheHl5YWLiwuenp7cvn0bgMDAQDp16oSrqytdunQhODgYAD8/Pxo3bszYsWOpXbs2K1eupGfPntSqVYvff/8dgPv37/PVV19Ru3ZtmjVrxq+//qrL78KFC1StWlX33tramnLlyvHPP/8wadIkhg8fDkDHjh0ZOHAgAD179mTx4sUEBASg0Wi4cOECnp6euLi40LNnTx4/fqxL7+jRo3h6euLq6oqXlxe3bt3SrXu2fXR0NBMmTKBevXr8/fffuvUnT56kY8eOuLi40LRpUzZs2JDueK1YsYL69evz/vvvs2jRonTrR40apev68O98fX19qV+/Pk2aNGH16tWKn5AQQgghskWbmnOvPCjPVX7HjRtHt27d2LJlCzExMSxZsoRr167Ru3dvWrduzc6dO2nQoAE9e/YkPDwcgLt379KwYUMaNGjAnDlzGDJkCBqNhr1795KamsqgQYN49OgRmzdvZtSoUXzzzTcEBgYC8OTJE2xsbPTKUKhQIZ48eYKzszPXr18nNTUVExMTXaX22rVruLi46OJHjx7N8OHD2bBhA5cuXWLdunVAWsV6wIABtG7dGn9/fxwdHenbty+p/7rdMXDgQCwsLJg7dy4VK1bULf/qq69wdnZm3759jB07lokTJxISEqJb//vvvxMUFMS6desYMGAA3333HaGhocrHOjg4mA0bNjBy5Ehmzpyp+7EghBCGYGpqrPcyMUn7k2Vior9cCCGyIs9dNTp37kyrVq0oX748zZs3JzQ0lLVr11KjRg169eqFg4MD3t7elCtXjk2bNgFQrFgxWrZsSbly5ahSpQpubm44OTmRlJTE2bNnOXv2LOPGjaNMmTJ8+OGH1K5dG39//xeWQavVYmRkpKv83r59G0dHR8zNzbl37x4PHz7kvffe08UPGDCAevXq8e6771KvXj3CwsIA2LhxI5UrV6Z3797Y29szdOhQbt++zblz5/Tyc3V1ZcyYMdStW5eCBQvqlltYWJCSkoKpqSkffPABwcHBeg8DarVavv32W8qWLUv37mmPljz7QaBi1KhRlC5dmlatWtGwYUN27dqlvK0QQmTG1tZa72Vjk9YFy8bGSm+5EPlOqjbnXnlQnnvgrUGDBrr/m5unPQEfGhpKuXLl9OLKli1LaGgoZcqUwcLCQrf8+f8Duorop59+qlsWHx+PiUnas+tFihTh6dOnettERUVha2tLhQoVMDU15fDhw1SsWJFChQqxZ88eypcvr9da/O8ya7VpJ1t4eDiXL1/Gzc1NL/3Q0FCcnZ117z///PMMj8XChQvx8fGhZcuW2Nra0qFDB71YV1dXrK2t9Y7Vs7xVPF+RLlmypO5YCSGEIURExOi9NzExxsbGisjIOFJS8ubtWCHE65fnKr/Pt3w+4+TkxLVr1/SW3bp1i0aNGmWanoODAyYmJvzyyy+YmqYdroSEBN3/q1WrxtmzZ3Xx0dHR3Lp1iypVqmBkZES1atXYsWMHvXv3plChQuzcuVOvywOkdZPIiL29PU2aNNHrcxsdHU2pUqX04p5VYJ8XFxdHdHQ0Pj4+mJqacvLkST777DMqVarEBx988NJ8Vd2+fZtKlSoBaRX1kiVLZis9IYR4XnJyxhXclJTUF64TIl+Q0R6yJc91e8hIt27dOHnyJCtXriQ8PBxfX19u3rzJJ598kum2zs7OvPvuu6xZswZjY2OePHnC8OHDWbZsGQBdu3Zl//79bN68mZCQEMaPH0/RokVp3LixbvuzZ89SsWJFKlasyJkzZ/RabV+mc+fOBAQEcPnyZczMzDhz5gyenp7cvHkz0221Wi39+/fn559/5s6dO7rlKSmKA7gqmDlzJiEhIfj7+/PXX3/h4eFhsLSFEEIIIV6HPNfym5FKlSqxfPlyZs2axcKFC9FoNPz88884Ojpmuq2xsTFLlixh+vTpdOjQASMjI5o3b87o0aMBaNy4MRMnTmTJkiVMmjSJatWqsXTpUiwtLYG0yq+JiYleVwfVym/VqlWZO3cu8+fP5/r16zg4ODBjxgyqV6+e6bYFChTAx8eHBQsW4OPjQ4ECBfj000/58MMPlfJWUadOHbp27YqJiQljxoyhXr16BktbCCGEEC8gLb/ZYqTNSidPIUgb6qxHjx5cunTJIOn5lFadxwm6VgnJPAjYfVZtBqnz5moXkKEV1fozr7qilu91xRnjFp5Qm1lvrYvazHKqnipOx/ZUcZYpAEvFWa4uGqnN4tcoyVIprqCBH9golqr22Z3+1/MDLxKleAz7lVZ7GHX3jcx/1AO4GEcpxQHsNE7fnSwjqrcSLRRnCet5conee1NTY2xtrYmIiNHr9uDnOlApvdJJyUpxscaq8xGqsU1Vy9coCzPLxSse7XgjtThLxSGtYhSPTXHF78k5c7Xvieq5pVolLKJ4EzRZcWa5XmFrFHM2jNiFA3IsrwJffp9jeeWUfNHyK4QQQgiRZ0i7Zbbkiz6/wrBq165tsFZfIYQQQoicJC2/QgghhBC5ifT5zRZp+RVCCCGEEPmGtPwKIYQQQuQmeXTmtZwiLb9CCCGEECLfkMqvEEIIIYTIN6TbgxBCCCFEbqI4LrPImLT8CiGEEEKIfOOta/nVaDSsWrWK2rVrp1t3/fp1xo4dy/nz57G0tGTq1Kk0b95ct37UqFEAzJypNiuWIbm7u+Pt7Y2np6fB0rx79y5Tp07l2LFjFCpUCE9PT7y9vTE2zr+/WR7dKqAU55CiNrtQQ7vHSnFPwq2U4gooPoPwTqq5UpzqzG2f/j1ZKW5mzW+U4lTZpipOfwSohn6UqDbj033Fq9efZmrngiq3ZLXyqc4gVdBI7cAcu2qvFOekTVKK+9u0kFIcQHnFfYlUnBjN0FewFMVz67GJ2kljZuAJBG6bminFZeHrRJxirIXirhgrfiqWig2OFxVnblOthKjNkad+bhVLUUsxyNKws/0ZjDzwli1vXeU3KCiIAgUyruAsWLCAQoUKcfDgQaKiojA11S/+hAkTXkuZVKbz3bZtG+bmahUaVd7e3lSqVIkdO3Zw/fp1vL29cXR0pGPHjroYLy8v3n//fYYMGZLl9P38/PD19eXgwYOGLLYQQgghxFvrrav82tjYvHBdREQE77//PsWKFaNYsWLp1ltZqbXOvQ4FCxY0aHpPnz7l7NmzjB49Gnt7e+zt7enduzd37941aD5CCCGEyF20MslFtmTp7tPhw4d5//33SU7+3+2CWbNm6Vodjx49iqenJ66urnh5eXHr1i1dXEBAABqNhujoaCZMmEC9evX4+++/0+Wh0WgICAjQW/bJJ5+g0WgIDAzE19cXjUaDq6trum1HjRql6/rwvJCQED7//HNq1qxJ06ZNWbZsmd769evX06xZM1xcXOjYsSPBwcG6/dFoNPTo0UNXNo1Gk257SOv24Ofnl255YGAgnTp1wtXVlS5duujShrRW24ULFzJnzhxq1apFvXr1+OWXXwAoVKgQJUqU4Mcff+TBgwcADBkyhMGDBysfE19fXxo2bJju81i/fj0ajYbRo0cTFham26/du3cD//usXnZsN2/ezAcffICzszPt27fnxIkT6fZdCCGEEOJtk6XKb4MGDTAxMSEoKEi37MCBA7Rp04YLFy4wYMAAWrdujb+/P46OjvTt25fUf/06GThwIBYWFsydO5eKFSsq5btixQqCgoKoUaMG/fr1IygoiKNHjyptGxcXR69evShcuDDbtm1j+vTp+Pr6smvXLiCtm8WkSZMYOXIk+/fvp06dOowdOxaAevXqERQUxPfff6+LDQoKwsvLSynva9eu0bt3b1q3bs3OnTtp0KABPXv2JDw8XBezadMmIiMj8fPzo3Xr1kyePJnExESMjY35/vvvCQ0NpWnTpowYMYIbN24oH5MtW7awdOlS5s+fz+7duylZsiQzZswAoGPHjgQFBTF+/Hjs7e11+9WsWTOl/bpx4wbjxo3D29ubvXv30rhxY0aMGKG0rRBCqDI1NdZ7mZik/ckyMdFfLkS+k6rNuVcelKWrhqmpKR999BEHDhwA4MqVK0RERNCkSRM2btxI5cqV6d27N/b29gwdOpTbt29z7tw5vTRcXV0ZM2YMdevWVe4qYG1tjY2NDaamplhYWGBjY0OhQmoPaxw+fJjHjx8zefJkHB0dqVu3LosWLaJ8+fIAVKtWjb/++otGjRoRGhpKZGQkV69e1e2vjY2Nrg+yjY0NNjY2yn17165dS40aNejVqxcODg54e3tTrlw5Nm3apIuxs7Nj4sSJlC5dmi5dupCQkKBr6a1atSo7duzAx8eHGzdu0KFDB/744w+lY/LBBx9w5MgRKleuzM2bN4mLi9Ptl7m5OTY2NlhZWWFsbKzbLzMztYcyzM3NMTY2JikpCRsbG7766itdq7EQQhiKra213svGJq1rm42Nld5yIYTIiiz/ZG7btq2u8nvgwAFatGiBubk54eHhXL58GTc3N9zc3PDw8AAgNDRUb/vPP//cAMVWFxYWRsmSJbG0tNQtq1evHpUrVwYgOjqaMWPG0KhRI2bNmkVkZGS61upXFRoaSrly5fSWlS1bVu+Y1K1bVzd6w7NKtVarJSIign/++QcjIyOaNm3Khg0baNy4MZMnqz3Vf//+fYYMGUKzZs3w9fUlKSkpW/sVGxur+7+joyNz5szBz8+P+vXr88knnyi3xAshhKqIiBi9V2RkHACRkXF6y4XId7SpOffKg7Jc+XVxccHc3JwLFy6wf/9+2rRpA4C9vT1NmjRhy5YtutfWrVupV6+e3vbW1jn7K93BwYH79++TmPi/4Y7mz5+v6wKwYMECYmJi+OOPP9iwYQMdOnRIl8azyqk2i8PfODk56fV7Brh16xaOjo669y9qwT558iQff/yxrtwmJiY0adKEp0+f6sUZGRllWK7JkydTokQJjh07xurVq2ncuHGG+5XRtkb/P/RSSkqK7t/z58/r1t+7d4/SpUuzfv16AgMD8fDw4KuvvuLxY7Vhw4QQQkVycqreKyUl7Q9xSor+ciGEyIpX6izVpk0b1qxZw6NHj3j//fcB6Ny5MwEBAVy+fBkzMzPOnDmDp6cnN2/eNGR5s6xp06bY2toyfvx4wsLCOH78OOvWrdM90BUVFUVqaioRERH8+eefTJ06FdCv6JYtWxYTExP27dvHvXv3dF0PMtOtWzdOnjzJypUrCQ8Px9fXl5s3b/LJJ59kum2NGjWwtrZm+vTp3Llzh/Pnz7NixYp0/XIrVKhAQEAA9+7d4/Lly7quDc/269GjR+zevRtfX990Fd0KFSpw584dgoODCQ8P5/jx40DaDxlA17d78eLF3L9/X7fd9evX8fLy4siRI0RERGBsbKz3EKQQQgghXiPp85str1T5bdu2Lb/++isfffSRrpWwatWqzJ07Fx8fH5o3b86iRYuYMWMG1atXN2R5s8zKyooVK1bw+PFj2rZty5gxYxg4cKBuMoohQ4YQHx9P8+bNmTt3Lr169QLg7NmzujRKlCjBpEmTmDZtGu7u7ixatEgp70qVKrF8+XK2b9+Oh4cHf/zxBz///LNey++L2NnZ8eOPP3LlyhU++ugjBgwYQK1atXQP4z3j7e2NpaUlzZs3p3v37ly/fh1IG53h8uXLNG/enDVr1tCzZ0/u37/PvXv3dNs6OzvzxRdf8Pnnn9O8eXM2b94MQOnSpfH29mbYsGG0adOG2NhYWrZsqduubt26fPnll0yZMoVmzZqxevVqZsyYgZ2dndJxEUIIIYR4U4y0Wb2XL4SB+ZTurhxbUPEO5xMDzzRlozjDVf8Hh5TifEo2VYpTnU0pxFTtazzq5BSluMU11GaWM8vC1UM1tqjibewIxaf8ow08GECpJLUdMfQYBOFmalN6nTGOU4qrmaI+LvrYiGNKcYftqinFtY+5kXkQcOLin3rvTU2NsbW1JiIiRq+7w+/vqT1LEm6m9qkkZGGmNRV2itePG1n4Qr2rOHFhvOIMgvcUR/1XPa+LKu5zrOKxVv1IVGe0K6F4nfno3FSlOLNiFdQyNpCYiV1zLC/rietzLK+cImPECCGEEEKIfOOtm+FNCCGEEEK8RB7ti5tTpOVXCCGEEELkG9LyK4QQQgiRm+TR8XdzirT8CiGEEEKIfEMqv0IIIYQQIt+Qbg9CCCGEELmJPPCWLdLyK4QQQggh8g1p+RVCCCGEyEW0qfLAW3ZI5VfkKofN1GavKo65Upyl4rxBp4wTlOIWKs7cVkhx9qOHBv6Gqs7cNujUZKU4X8X0AJIUp2gKsVQLtFW89pdIVotTdUnt1MJaa+BpwhSV11oqxT00Vr9tOsO2rlLcYcX0xls5K+et4pa5YWduizUy7C3lFMVZ1gpm4ZwJMVOLS8DA+6IYl6A4y2aRVLV9Vt2LeMVD+I+F2jlzU/Ea9+XtNWoZi7eCVH6FEEIIIXIT6fObLdLnVwghhBBC5BtS+X3DAgIC0Gg0+Pr6Ur9+fZo0acLq1asB8PHxwcvLSy/e3d0dPz8/AEJDQ9FoNNy4cYN58+bRuHFj/P39M033mT179tC6dWtq1qxJnz59uHnzpm5ddHQ0w4cPp3bt2ri5ufHVV18RHR2tW3/jxg369u2Lm5sbrVq14siRI6/j8AghhBDi31K1OffKg6Ty+5YIDg5mw4YNjBw5kpkzZ/L7778rbzt+/Hju3LnD9OnTqV27tlK6x44dY9iwYfTr149t27bh6OhIjx49dBXcpUuXcubMGdatW8eGDRu4efMmK1asACA2NpbevXtTqFAhtm3bRvfu3Rk8eDC3bt0y0NEQQgghhHg9pPL7lhg1ahSlS5emVatWNGzYkF27dilvW6JECb799lvq169P0aJFldJduXIlbdq0oV27djg6OvLNN9+QnJysW29ubo5WqyUpKYkKFSrwyy+/MHDgQAAOHz7M/fv3mTBhAg4ODnz66ac4ODiwd+9eAx0NIYQAU1NjvZeJSdqfLBMT/eVC5Dva1Jx75UHywNtbwsnJSff/kiVLEhYWhr29fbq42NjYdMs+//zzLKULaV0matasqVtnZmaGo6MjoaGhAPTq1YvIyEi+/PJLIiIiqF+/PiNGjMDe3p6wsDBSUlL44IMPdNvHxcXpthVCCEOwtbXOcLmNjVUOl0QIkZdI5fctcfv2bSpVqgRAeHg4JUuWxMjIiJSU/w0sExISQkRERLptCxQokKV0Ia1S/Hwf3+TkZMLCwnSV5Zs3b9KrVy9Gjx7Nw4cPGTp0KFOnTmXRokU4ODhQrFgxNmzYoNs+Pj7+peUQQoisioiI0XtvYmKMjY0VkZFxpKTkzRYpIZTk0b64OUXuF70lZs6cSUhICP7+/vz11194eHjg4ODA1atXefLkCQkJCUyePBkzM8XBHV+SLkDPnj3Ztm0b27ZtIywsjMmTJ2NqakqrVq0A+Pnnnxk1ahQXL14kMTERY2NjXUW8SZMmmJqa4u/vj5mZGXfv3qVv377s2LHDsAdFCJGvJSen6r2eVXhTUvSXCyFEVkjL71uiTp06dO3aFRMTE8aMGUO9evVISEhg//79tG3bFjs7O3r16sW1a9eynS5AvXr1mDt3Lj4+PoSHh+Pq6srPP/9MwYIFARg5ciSTJ0+mZ8+eJCQk4OzszKhRowCwtrZmxYoVTJs2jR9++AErKys6dOhAnz59DHtQhBBCCJGOVlp+s0Uqv2+Jvn370rdvX71lFhYWLF68WG9Z+/btdf93cnLi0qVLWU73mRYtWtCiRYsM1xUtWpSFCxe+MN3y5cvz008/vTRvIYQQQoi3jVR+Ra5SVav2oEtBxTuhqjdMCxqr5RunOLXmU8XeK0mKk3raKk4RqjjjqPK0xd6K0yAD/OP2pVLc2cTCSnGqUz9HqO60ogKKU9BaKTbMqJ6DsYqd1IopngtmWWg4Us27gOLORL+hDneq3yfVz1hVvGK+5orTrQOUTlKLCzEz7PmgOk25qer5r5ie6mzcqulZK56rBr58GI60/GaL9Pl9w2rXrp1p6+3blK4QQgghRG4mLb9CCCGEELlJqjzomR3S8iuEEEIIIfINqfwKIYQQQuQmqdqce72ihw8fMmjQIFxdXfH09OTixYtZTuPGjRtUr17d4JNoSeVXCCGEEEIYjFarxdvbm4iICH799Ve8vLwYNGgQMTExmW/8/1JSUhg5ciRxcXEGL5/0+RVCCCGEEBlq1qzZS9cfOHAg3bJTp05x+vRpdu/eTfny5alQoQI7duxg//79tGvXTinf77///rVUfEFafoUQQgghcpe3vNvDhQsXKF26NOXLl9ctc3V1JTg4WHn7n376iW+//faV8s+MtPwKIYQQQogMZdSym5moqCjKli2rt6xw4cJcuHAh020TExMZMWIEX3zxBZUrV85y3iqk8iuEEEIIkYtotW/3JBempqaYm5vrLbO0tFTqxjBv3jyKFStGr169XlPppPL7VtBoNKxatYratWsbLM2EhARmzpzJ9u3bsbKyolOnTnh7e2NikvX5anx8fAgMDGT16tUGK9+rUp2FSHUERNXLR1Zmw1Kh+imYKM74pDqrkaXigVGdxUl11jaAd0+8eLrs5wVUV5tdTnXGJ0P/iVCcnE+Zat8zE8UdSVHNNwuTmCUrxqlOjGboEUpVj2FBxQIaunwWit/jrPRDVJ11T/XapZq3anqqlQvV77Eq1fRUT39DX/vzC1tbWx4+fKi3LDo6Ol2F+N+CgoLYsmULW7duxcjIsDMtPk8qv2+BoKAgChQoYNA0J06cyKlTp1i+fDmmpqZ4e3tTqFAhevfubdB8hBBCCJHD3vLpjWvUqMHkyZOJjIzExsYGgODgYOzt7V+6nZ+fH9HR0Xh4eOgtb9u2LQMGDKB///4GKZ888PYWsLGxwdTUcL9D7t27x2+//caUKVNwdnamSpUqfPrpp2zevNlgeQghhBBCZKRixYpUqlSJefPmkZqaSnBwMPv27cPd3Z3U1FQiIyNJSUl/n+rrr79m9+7dbNmyRfcC+PHHH+nSpYvByieVXwU+Pj54eXlx/fp1+vfvT926dXXrjh49iqenJ66urnh5eXHr1i3dutTUVKZNm0atWrVo3rw58+bNw93dXfdhPqPRaAgICEiX7549e2jdujU1a9akT58+3Lx5U7fO3d2d9evXM2bMGFxdXWnSpAmHDx8G0lqSTU1NqVGjhi6+Tp06NG7cWCnt8PBw+vTpg6urK5988gnh4eF65bpx4wZ9+/bFzc2NVq1aceTIkawcTiGEEEJkx1s+2gPAjBkzOHz4MHXr1qVLly506NCBRo0aER4eTq1atbh8+XK6bezs7HByctJ7AZQqVUrXgmwIUvlV9OjRIz7//HMaNGjAd999B6QNxTFgwABat26Nv78/jo6O9O3bl9T/n3N769at7N27lw0bNtCvXz9WrVrFsmXLcHd3zzS/Y8eOMWzYMPr168e2bdtwdHSkR48eREdH62J8fX1xcHBgx44duLi4MHnyZADu3LlDkSJF9FqTq1atyqhRo5TS/u9//0tKSgpbt26lV69ebNu2TZdObGwsvXv3plChQmzbto3u3bszePBgvUq/EEIYgqmpsd7LxCTtT5aJif5yIcTbp3LlyuzatYu5c+fyyy+/MGXKFACcnJy4dOkS7777rlI6ly5d0lWCDUWuGoquXbvGhAkT6NGjB7Vq1QJg48aNVK5cmd69e2Nvb8/QoUO5ffs2586dA+Ds2bPUrFmTihUr0rZtW+Li4nj69KnSr5eVK1fSpk0b2rVrh6OjI9988w3Jycns2rVLF1O1alW8vb1xdHSkU6dOhIWFAZCUlPTSbhQvSzs8PJzTp0/z3//+lzJlyvDRRx/pDXB9+PBh7t+/z4QJE3BwcODTTz/FwcGBvXv3vtJxFUKIF7G1tdZ72dhYAWBjY6W3XIj8RpuqzbFXdlhZWdGgQQOqVKlioD03DHngTVHVqlVp0KCB3rLw8HAuX76Mm5ub3vLQ0FCcnZ2pXLkyy5YtIyYmhtOnT2NhYUG5cuWU8gsNDaVmzZq692ZmZjg6OurNb12/fn3d/59/grJw4cI8ffpULz1/f39GjhzJ2bNnX5r2gwcPAHB0dNStL1OmDBEREQCEhYWRkpLCBx98oFsfFxdn8Hm3hRAiIkJ/KlQTE2NsbKyIjIwjJcXQYzIIIfILqfwqsrZO37pgb29PkyZNdN0JIG0oj1KlSgFQqVIlnj59Su3atTE1NWXy5MkUKVJEKT8nJye9frjJycmEhYXpNf0XKlQow21dXFyIjY3l4sWLugGib926pavQviztYsWKAXD37l2KFi0KoGtRBnBwcKBYsWJs2LBBtyw+Pt7go1UIIURycsYV3JSU1BeuEyJfeMtHe3jbSbeHbOjcuTMBAQFcvnwZMzMzzpw5g6enp65iOXv2bHr27MnWrVs5fPgw7du3V067Z8+ebNu2jW3bthEWFsbkyZMxNTWlVatWmW5brVo16tSpw9ixY7l06RJBQUGsWbOGtm3bZpq2g4MD7733HvPnzyckJIR9+/axb98+XdpNmjTB1NQUf39/zMzMuHv3Ln379mXHjh1ZOnZCCCGEEG+CtPxmQ9WqVZk7dy7z58/n+vXrODg4MGPGDKpXrw6kVY4nTJjA0qVLiY2NxcrKio4dOzJu3LhM065Xrx5z587Fx8eH8PBwXF1d+fnnnylYsKBS2Xx9fZk2bRpdu3bF2tqajz/+WDc+XmZpz58/n/Hjx9O2bVv+85//0KJFC+7fvw+ktYCvWLGCadOm8cMPP2BlZUWHDh3o06fPKxxBIYQQQmSZ3PjIFiPt2z5HXi4VExNDgwYNmD17NjVr1kSr1fLnn38yYsQITpw4oVyJzQ98SndXji2geLYWULwlVCY1QSnusomlUtwtU7V8iypOyXbaJF4p7qMEC6U4Y8Wv+xlLtfJpEtVn4FGdkarXmclKcb411GaCe2Rs2L8SPaweK8X5xRZTilM8ZaiWoDbPWgEjtTneCpgmqWUMHDZWu141SY3OPAjYY6L2kFr/E9/rvTc1NcbW1pqIiBi9bg/L3AYqpVcnXu37bmel9r1TdT0+4y5q/xZjrH4zVmOsdqxjk9XmJIzWqs07WbpATOZBgJmZ2nm4J95OKU51hkPV2SmdktQSNFG8ZnreXaeWsYE89WqWeZCBFF59IMfyyinS8vuaWFtb06NHD2bOnMn9+/cxNjambNmyTJ48WSq+QgghhHhl2R2FIb+Tyu9rNHToUIYOHfqmiyGEEEIIIf6fVH6FEEIIIXITafnNFhntQQghhBBC5BtS+RVCCCGEEPmGdHsQQgghhMhNZKizbJGWXyGEEEIIkW9Iy68QQgghRC4iQ51lj7T8CiGEEEKIfCPbLb9eXl68//77DBkyRCl+1KhRAMycOTPD9RqNhlWrVlG7du3sFi3XO3/+PJMmTeLChQsUKFCALl268NVXX2GchVmA8ppoxV2PNFab5iclWW3mthjFfC1Qy1c1vUZJauW7r/hNttCqlc9WsT/ZwyxcQYwVGypUZ27zPqU2E1z3mv9Vy1hR0FPFmdsUj02skeqse2oJWmjV4qolqF9HTNQmEORPxZng1OYSU9fB6pFS3C+ozSZWMFVxhxXFKSZXUm0SPwDCkguoxZmpfc6lktS+9PtTCivFFVebTI/CijOylUhWOzhNNzZXivPpeVAprmiK+iyWOUr6/GbLW1eLCgoKombNmm+6GG9cdHQ0/fv3p1atWhw5coTvvvuO1atX89tvv73pogkhhBBC5FpvXZ9fGxubN12Et8LVq1dp27YtX3/9NQBFixbFzc2Nv//+m44dO77h0gkhhBDiTZE+v9mT5ZbfgIAA2rZti4uLC8OGDSMpKUm37ujRo3h6euLq6oqXlxe3bt3KcoE0Gg0BAQF6y3x8fPDy8mL79u24u7tTo0YNxo//363Rx48f8+WXX1KzZk3atGnD+PHjcXd3ByA0NBSNRkNoaGi69J4JDg6mW7du1KhRA09PT4KDg3XrvLy8WLhwIXPmzKFWrVrUq1ePX375Rbf+0aNHDBs2jNq1a9OgQQNmz55NSkoKAN9++y1du3bV25fu3bsza9asTI9D9erVGTlypO59amoq165do3z58gB89dVXDB8+XG8bd3d31q5dC0BiYiLz5s2jSZMm1KlThxkzZuh9VoGBgXh6euLi4kKzZs3YsmWLXloajYbjx4+zfPlyPvzwQ5YtW6Zbd+/ePQYMGEDNmjWpXbs2EydOJFnxlpQQQgghxJuUpcrv48ePGTRoEA0aNMDf359SpUpx+vRpAC5cuMCAAQNo3bo1/v7+ODo60rdvX1JTDdMx5cqVK6xbt44ffviBKVOmsHHjRgIDAwGYNGkSt2/fZuPGjYwdO5Zdu3Ypp3vv3j169erFe++9h7+/Pw0bNqRv375ERUXpYjZt2kRkZCR+fn60bt2ayZMnk5iYSGpqKoMHD+bJkyds3LiRxYsXs23bNlasWAFAhw4dOH36tK7ife/ePU6ePImnp2eW93/jxo1ER0fToUMHXdoHDhwgNjYWgNOnT/PgwQM8PDwAmDdvHr/99hsLFixgxYoV7Nmzhx9++AGA2NhYBgwYQL169Thw4ACjRo1i7NixPHjwQC/PRYsWcezYMcaNG0erVq10y2fPnk1ERARbtmxh+fLlHDx4kG3btmV5n4QQ4mVMTY31XiYmaX+yTEz0lwuR76Tm4CsPytJV4+jRowAMHToUR0dHhg4dSrFiaQ9/bNy4kcqVK9O7d2/s7e0ZOnQot2/f5ty5cwYpaHR0NPPnz+edd97Bw8OD4sWLExYWRkpKCvv372fAgAFUqlSJOnXq0LlzZ+V0t27diqWlJSNGjKBUqVIMGTKEhIQEfv/9d12MnZ0dEydOpHTp0nTp0oWEhAQePHjAuXPnOH36NNOmTaNcuXI4Ozvj4+NDjRo1AKhUqRJVq1Zlx44dAPj7+1OlShXeeeedLO37tWvXmD17NmPGjKFIkSIANGjQAGtraw4cOADAzp07adq0KUWKFEGr1bJhwwb69+9P9erVeffdd+ncuTP+/v4AmJubs2fPHr744gseP37MnTt3SE5OTtdSn5qayvfff0/jxo1xcHDQLbewsCA1NZXU1FSqVq3KgQMHaNeuXZb2SQghMmNra633srGxAsDGxkpvuRBCZEWW+vzev3+fkiVLYmZmlraxqSmOjo4AhIeHc/nyZdzc3PS2CQ0NxdnZOdsFrVSpEqVKldK9Nzc3R6vVEhERQXJyMvb29rp1z8r0Is9aS5+V+8mTJ3qjSyQmJup1k6hbt65uhAVzc3MAtFotYWFhmJub65XL1dVVL68OHTqwfv16BgwYwM6dO7Pc6hsZGcngwYNp164d7du31y03MTGhTZs2bN++HQ8PD3bv3s20adOAtBb6uLg45s2bx8KFCwFITk7WtcIbGRnx448/sm3bNkqWLEn16tUBdN01nunbty8mJumfyx42bBjz5s2jV69eJCQk0KxZM4YPH07hwmpPAQshhIqIiBi99yYmxtjYWBEZGUdKSh5tkhJCgVZO/2zJUuW3ePHiPHz4kJSUFExMTEhNTeXOnTsA2Nvb06RJE91QZpDWWvt8xTA7ChUqlOFyW1tbzMzM9CrZt2/f1q03MkobpuT57hdnz57VLXdwcKBKlSosWLBAtz42NhZbW9tM83Z0dCQxMZF79+5RsmRJANauXcuJEyeYP38+AB4eHsycOZM9e/Zw6dIlWrdurbzP8fHxDB48GAcHB8aNG5duffv27fH09GT37t1AWmswpLVUW1lZMXnyZF1lPCUlhbi4OAB27NjB1q1b2bFjByVKlCA2NpaNGzemS79AgYyH0rl16xbDhg1j2rRphISE8Pnnn7No0SLGjBmjvG9CCJGZ5OSM/8KnpKS+cJ0QQmQmS90eGjRoQFJSEt999x137tzBx8eH+/fvA9C5c2cCAgK4fPkyZmZmnDlzBk9PT27evPk6yq1jYmJCixYt+OGHH7h69SrHjh3TeyCtWLFimJubExQUBICfnx9///23bn3btm25ffs2gYGBmJmZce3aNbp27arrT/wy1apVo3r16owdO5abN28SHBzMsmXLqFChgi7G1taWJk2a6B7CU20d1Wq1DB06lIcPHzJjxgwSEhKIiYkhPj5eF6PRaPjPf/7DpEmTaNu2ra6V1sjIiE8++YTNmzcTGxtLcnIyixcvZujQoUDajxKAqKgoLl68qBujWatVe3p07ty5TJs2jWvXrpGSkoKxsXG6VmMhhBBCvCbS5zdbslT5LV68OL6+vhw8eJDWrVtz7do1XWtr1apVmTt3Lj4+PjRv3pxFixYxY8YM3S311+mbb76hfPnydOnShVmzZun1P7WwsOCbb75h/vz5tG7dmqCgIL2RHkqVKsVPP/3E5s2badmyJZMmTcLb21v34NjLGBsbs3jxYgoXLswnn3zC4MGD8fDwYMCAAXpx7du358mTJ1nq8nDp0iUOHjzI9evXadSoETVq1KBGjRr069dPKe3hw4fj4uJCv3796NChA48ePWLJkiW6bWrVqkWnTp3w9vbG3d2dIkWKKPfPnjZtGk+fPqVz5854enpSunRpBg8erLxvQgghhBBvipFWtbkvF/Hz89NV0t+0GzducOHCBWbOnMnhw4cz7EP7KuLj43n06BH+/v7s27ePTZs2GSTdN8GndHfl2IqJakOqXTNX69Ez4UlA5kGATyG1GQfjFX9O3jBV+zldPUFtdqE9FolKcdUUZ64qpjhyXUQWTmfVC809E7Vjc0Ubm3kQsObkPMWc1SxzVZuBbq9xpFJckmLnvbapRZTiBt4/pBS3qERTpTiAOyZqn17ZZMPOhtX6zBK996amxtjaWhMREaPX7aF/zW5K6Tkaq82Kdlcbp15IBR2S1Mavz8of47uKnRYLKCaq2hK2X/G8bpWits9PFDNOUjy17hipXbxUL11lU9UO9Je31yimaBgPWzXOsbyK7TqSY3nllLdukou8xtPTEwsLC6ZMmaJX8Z04caJuFIh/K1myJDt37nxpuk+fPqVVq1bY2dkxb55h/7gLIYQQQuRVebLy6+np+Upj6b4Oz8ZB/rcvvviCvn37ZrjO1DTzj6VkyZJ6k3EIIYQQIp/Io31xc0qerPzmBnZ2dtjZ2b3pYgghhBBC5CtS+RVCCCGEyEVknN/skXkhhRBCCCFEviGVXyGEEEIIkW9ItwchhBBCiFxEuj1kj7T8CiGEEEKIfENafoUQQgghchFp+c2ePNXym5KSwpQpU6hduzbVqlVj2LBhunUBAQFoNBqD5ufl5YVGo0Gj0eDi4kL79u0znZwiJ/j4+OhN8QwwaNAgRo0apbfMz88Pd3f3LKX9Oo6jEEIIIUROyVMtv7///jubNm3il19+oUiRIjx48EC3rmbNmgQFBRk8zy5dujBs2DAiIyP57bffGD58OBUqVODdd981eF6G1rp1a5o3b/6miyGEEEKIrNAadirx/CZPtfw+fvyY4sWLo9FoKFmyJNWqVdOtMzU1xcZGba7xrDA3N8fGxgYnJyeGDBlCoUKFOHfunMHzeR3Mzc0pWLDgmy6GEEIIIUSOyROV3/Xr16PRaBg9ejRhYWG6rgi7d+/Wxbzodn1SUhILFy6kSZMm1KpViy+++IKHDx/q1oeHhzNgwADc3Nxo1aoVW7ZseWE5Dh48SGRkJOXLlwcgKiqKYcOGUatWLWrXrs2IESOIj4/XK8+FCxfw9PTExcWFnj178vjxY116R48epXnz5tSqVYsJEybg5eVFnz59AEhMTGTevHk0adKEOnXqMGPGDJKSkrJ03F7U7SE1NZVp06ZRq1Ytmjdvzrx583B3d9fb95eVWwghhBCvjzY15155UZ6o/Hbs2JGgoCDGjx+Pvb09QUFBBAUF0axZs0y3XbBgAVu3bmXu3Ln4+fnx9OlTxowZA0BCQgKfffYZ1tbWbNmyha+++oqJEyeyd+9e3fbr16/Hzc0NZ2dnRo0axddff42bmxsA06dP5/Lly/zyyy9s3LiRCxcusG7dOr38R48ezfDhw9mwYQOXLl3SrY+Ojmbo0KH069ePDRs2cOjQIdzd3ZkxYwYA8+bN47fffmPBggWsWLGCPXv28MMPP+jSvXz5Mm5ubrrXkSNHlI/n1q1b2bt3Lxs2bKBfv36sWrWKZcuW6VWUX1RuIYQwFFNTY72XiUnanywTE/3lQgiRFXmiz6+5uTnm5uZYWVlhbGys3L1Bq9Wybt06Jk6cSM2aNQGYMmUKly9fBuDQoUPcv3+fqVOnYmVlhZOTEydPnmTlypW6vrJt2rRh8ODBTJ8+ncjISF3LLMCIESMwNzcnJiaGs2fPotVquXr1ql4ZBgwYQL169QCoV68eYWFhANy4cYPo6GjatWuHubk5NWvW5MaNG5QoUQKtVsuGDRsYNmwY1atXB6Bz585s374db29vAMqXL8+PP/6oy2f8+PHKx/Ps2bPUrFmTihUr4uTkxLhx43j69KmuRftl5RZCCEOxtbXOcLmNjVUOl0SIt4s2Vfr8ZkeeqPy+qoiICGJjYylbtqxuWZkyZShTpgwAoaGhlCxZEiur/11oy5Urp9edomDBgjg5OdGvXz+6dOnChQsXqFKlCgBnzpxh1qxZxMXFUaVKFczMzEhN1b+H0KBBA93/zc3N0Wq1AJQtWxYrKysCAwNxdXXlwoUL9OzZE0jr2xwXF8e8efNYuHAhAMnJyXppm5mZ4eTkpHtvaWmpfFwqV67MsmXLiImJ4fTp01hYWFCuXDmlcgshhKFERMTovTcxMcbGxorIyDhSUvLo/VghxGuXryu/tra2FChQgJCQEF0LanBwMGPHjmXTpk04OTlx79494uPjdZXHW7du4ejomC4tV1dXXF1dWblyJbNnzyYxMZGhQ4cyatQounTpAsAXX3yRbrtChQplWDZjY2OqVauGt7c3ycnJNG7cmI8//hgAOzs7rKysmDx5Mq6urkDaMG9xcXHZPiYAlSpV4unTp9SuXRtTU1MmT55MkSJFlMothBCGkpyccQU3JSX1heuEyA/yal/cnJKvO0sZGRnRrVs3Fi5cyKlTpwgJCcHHx4ciRYpgZWVF06ZNKV68OOPGjSM0NJQ9e/awceNGevXqlWF6vXv3xt/fn/v375OYmEh8fDwJCQncvXuXH3/8kX379im3kPr7+5OQkMCvv/7K7t27WbhwIWZmZrpyf/LJJ2zevJnY2FiSk5NZvHgxQ4cONchxmT17Nj179mTr1q0cPnyY9u3bGyRdIYQQQog3LV9XfgG++uorWrduzdChQ/H09MTa2pp58+YBYGFhwYoVK3R9b+fPn8/EiRNp0aJFhml98MEHODg4sG7dOgoWLMg333zD0qVLadeuHZcvX6Z9+/ZcuHAhXdeHjLi7u3Pnzh26detG8+bNee+99/j4448JDw8HYPjw4bi4uNCvXz86dOjAo0ePWLJkiUGOSefOnVmyZAkff/wxderUwdXVlalTpxokbSGEEEJkj1ZrlGOvvMhIK50130qjRo0iJSWFYcOGYWlpyd27dxk6dCjdu3fn008/fW35xsTE0KBBA2bPnk3NmjXRarX8+eefjBgxghMnTryWcYF9SndXjm1oHKkUdyVRrVtGuJnaF7uhNkopboex2vGJMEpRimsXpxZ3ycxCKa5IitrX/ZK5UhgFsnBhNFOMa2X9MPMgIOhpMaW4KBPFjBX1OT1ZKW5hDbWHTFWfW2ln9UgpblZ8xg+J/dtivx5qGQPfdtioFFdQ8XyINVI7D/uf+F7vvampMba21kRExOh1e9jmOlApva7jiyvFGb1TVSlOWdQTpTDt1UvKSSafv6kUZzXrh8yDgORTuzMPAjBTuziYvqc2e+gPrmrfE0P30ezSQO0h7T2HHZTiOt9Zm53iZFlY3azNzpodjscO5lheOSVf9/l9mz1rafbw8CA+Ph47OzsaN25M27ZtX2u+1tbW9OjRg5kzZ3L//n2MjY0pW7YskydPlgkxhBBCiLeA9PnNHqn8vqXq1q1L3bp130jeQ4cONVj/YSGEEEKIt4lUfoUQQgghchEZ5zd78v0Db0IIIYQQIv+Qyq8QQgghhMg3pNuDEEIIIUQuIuN0ZY+0/AohhBBCiHxDWn6FEEIIIXIReeAte6TlVwghhBBC5BvS8ptHubu74+3tjaenZ7p1fn5+jB49GgBjY2NKlCjBBx98wNdff42lpWVOFzVLNhupTbRhqzhzW6lktXy3manlm6Q4c1XFFLWv3mkLtbgiahPBKf/atVacqcvqNfQ784tVm7nNVPHq9ZeR2qyAqqIVZ2778pTaTHDJf+9XihvbR22WJXvFT/mndpuU4gCsjNTOB9XzS/F0NbiF0x4oxRVMPWzQfKMVD0yBLHyfUimpFGe2V+18NVPMO15xX+KMDivFqc1HCAmKDZ3Givtx+JC9WnpvaQOrtPxmj1R+86mCBQty6NAhEhMTuXDhAmPGjMHU1FRXKRZCCCGEyIuk8ptPGRkZYWNjA0CjRo3w8PAgODj4DZdKCCGEEJmR0R6yR/r8vsUCAgLQaDT4+vpSv359mjRpwurVqwHw8fHBy8tLL97d3R0/Pz/d+4sXL9K6dWtq1qzJ0KFDefr0aYb53Lt3j7/++osKFSrolh09ehRPT09cXV3x8vLi1q1bunUxMTFMmjSJ+vXrU6dOHcaOHUtMTIwhd10IIYQQ4rWQym8uEBwczIYNGxg5ciQzZ87k999/V9rut99+Y+zYsWzYsIGrV68ydepU3bqoqCjc3NyoWbMmTZo0wcnJiWHDhgFw4cIFBgwYQOvWrfH398fR0ZG+ffuSmpoKwNixYzlz5gzLli1jzZo1BAcHM2fOHMPvuBAiXzM1NdZ7mZik/ckyMdFfLkR+o001yrFXXiTdHnKBUaNGUbp0aUqXLs3WrVvZtWsX9vaZd9bv1KkTdevWBWDgwIGMGDGCWbNmAWBtbc2WLVs4efIko0aNYvTo0djZ2QGwceNGKleuTO/evQEYOnQojRo14ty5czg5ObFr1y7Wrl1L5cqVAfj222959OjR69h1IUQ+Zmub8eNQNjZWOVwSIUReIpXfXMDJyUn3/5IlSxIWFpZh5Tc2NlbvfdmyZXX/d3R0JCkpiYiICCBtlAcnJyccHR35/vvvWbVqFePGjQMgPDycy5cv4+bmppdeaGhohmk/qwQLIYQhRUTod6cyMTHGxsaKyMg4UlJS31CphHjztIoj8oiMyf2iXOD27du6/4eHh1OyZEmMjIxISfnfgEEhISG6iu3zsc/cvXsXMzMzihQpohdjZGREr169+PXXX4mKigLA3t6eJk2asGXLFt1r69at1KtXD0dHR11+z+zfv59u3boZbH+FEAIgOTlV7/WswpuSor9cCCGyQiq/ucDMmTMJCQnB39+fv/76Cw8PDxwcHLh69SpPnjwhISGByZMnY2Zmprfdxo0bCQwM5Nq1a/zwww988MEHmJiYpEu/ffv2WFlZ8csvvwDQuXNnAgICuHz5MmZmZpw5cwZPT09u3rxJ0aJFadWqFdOmTePixYtcvXqVJUuWUKZMmRw5FkIIIUR+p03NuVdeJN0ecoE6derQtWtXTExMGDNmDPXq1SMhIYH9+/fTtm1b7Ozs6NWrF9euXdPbrmXLlkydOpWwsDDq16/P+PEZD3ZuYWFBt27dWL16NT169KBq1arMnTuX+fPnc/36dRwcHJgxYwbVq1cHYNq0acyZM4fevXuj1Wr58MMPGTFixOs+DEIIIYQQ2Wak1cpocW+rgIAAevTowaVLl950UV4rn9LdlWOvm6hNyVYmVe13XalktdP/pLnaz9+CWrWbKcUUn6B9rDhdkX2KWnpFUtTSu604Q55FFq4eqreZYhW7ssUqzqYXpM14iL9X1dCoiFLckOWNlOJMXT5QivvSbZRSXAHS393JSNUktTiAR4qhqjOURSie1/1PfK/33tTUGFtbayIiYvS6O/xcc6BSepGK+RY28BPuMYrnaoks5Ks645mJ4mdiqzjt3h3FJrMkxfIVVGxZTFRMT7VFr0Ki2g7HG6lduT6+s1YxZ8O4/G7LHMvrP//szrG8cop0exBCCCGEEPmGdHt4i9WuXTvPt/oKIYQQImtktIfskZZfIYQQQgiRb0jlVwghhBBC5BvS7UEIIYQQIhfJq9MO5xRp+RVCCCGEEPmGtPwKIYQQQuQiMkht9kjLrxBCCCGEyDek8iuEEEIIkYtoU41y7PWqHj58yKBBg3B1dcXT05OLFy8qbRcREcGQIUNwdXXF2dmZL7/8koiIiFcuR0ak20Me5+fnh6+vLwcPHtQtezZz3DPFihWjWbNmjB49GisrK+W0fXx8CAwMZPXq1QYt88uM1dxRijsc7KQUd91c7Yv9dflwpbg110orxV02SVKKG+10Xynu2FV7pbgQc8P+3o3NQnKqM01VS1Cbxe+Mpdrlq21qEbWMFTUq+Egpbmyfg5kHAfHsV4pbeGKmUtytRmqznUXHWCjFAezX2ijFqc7qVcDAY5Q+MlabJuyrcmrfY63irGOqkuLUpsiLear+mRyMs1OK+6DgQ6W45ES1MjZzjFGKe3K3gFLcnni1/TBXvH5EK16T/rFQ29+szGIp/ker1eLt7Y2RkRG//vorf//9N4MGDWL79u1YW1u/dNsRI0ag1WrZsmWLLp2ZM2cya9Ysg5VPWn7zsYMHDxIUFMRPP/1EYGAg33333ZsukhBCCCEykao1yrHXqzh16hSnT59m+vTpVKhQgQ4dOlC+fHn273/5j/3IyEgKFSrEwoULKVu2LOXKlaNdu3acOXPmlcrxItLym48VKlQIGxsbbGxsaNq0KadPn37TRRJCCCHEW6RZs2YvXX/gwIF0yy5cuEDp0qUpX768bpmrqyvBwcG0a9fuhWnZ2Ngwb948vWVXrlzRS8cQpOU3B/j4+ODl5cX169fp378/devW1a07evQonp6euLq64uXlxa1btwB4+vQp1apV49y5c7rYQ4cOUa9ePZKT024LX7p0CS8vL2rUqEH79u05evToK5Xv0aNH/PHHH1StWlW3bO/evXz00Uc4Ozvj4eHxymkLIYQQwrC0WqMce72KqKgoypYtq7escOHC3Lmj1nXxmcuXL7Nz504+++yzVyrHi0jLbw559OgRn3/+OV5eXvTr1w9I+2U0YMAAhg8fTqtWrVi4cCF9+/Zlz549FC5cmMaNG3PgwAGqVasGpP26+uijjzA1NeXx48f06NEDT09PZs2axe+//87AgQNZv349zs7OSmVq2rQpRkZGREdH4+Liwtdffw1ASEgIX331FWPGjKFly5bs2rWL//73vwQEBGBiotZPSgghssvUVL99xsTEWO9fIcTrl1HLbmZMTU0xNzfXW2ZpaUlcXJxyGvHx8QwbNoy2bdtSu3btLJfhZeQKkkOuXbvGhAkT6NGjB7Vq1QJg48aNVK5cmd69e2Nvb8/QoUO5ffu2rrW3bdu2uv4xqampHDp0iDZt2gDw22+/YWNjw4gRI3BwcKBz5840adIkSw+frV27lt9++43vv/+eiIgIZs5Me6CmZMmSHD16lE8++YS7d+/y8OFDoqKiuH9f7eErIYQwBFtba72XjU3aA7k2NlZ6y4XIb7TanHu9CltbWx4+1H/YMjo6Ol2F+GXGjBmDmZkZEyZMeLVCvIS0/OaQqlWr0qBBA71l4eHhXL58GTc3N73loaGhODs707RpU8aNG0dISAgPHjzA2toaFxcXXUyZMmUwMvrfLYly5cpx6tQp5TI5ODhgY2ND6dKliY2NZejQoQwfPhwjIyNmz57N4cOHKV26NO+88w4AKSkpr7r7QgiRZRER+iMLmJgYY2NjRWRkHCkpBh6SQQhhMDVq1GDy5MlERkZiY5M2WkxwcDD29mojE82ZM4cTJ06wefNmLC0tDV4+qfzmkIyG9rC3t6dJkyaMGjVKtyw6OppSpUoBYG5uTosWLThw4AD379/XtfoCODk58ccff6DVanUV4Fu3buHo6JitciYnJ7Nu3Tr+/vtvDh48SMGCBbly5Qq//fZbttIVQoisSk7OuIKbkpL6wnVC5AevOgpDTqlYsSKVKlVi3rx5jB8/nnPnzrFv3z4WL15Mamoq0dHRWFtbZ9iVcvny5axdu5bly5dTsGBBYmLSfgRnNkRaVki3hzeoc+fOBAQEcPnyZczMzDhz5gyenp7cvHlTF9O2bVv27dvHgQMH9Cq/7du3JzIyktmzZxMeHs7GjRs5fPiw3vi9mYmKiiIiIoJTp06xZMkSqlSpQpEiRYiKigLSHro7ffo0I0eOBNLG7RNCCCGEyMyMGTM4fPgwdevWpUuXLnTo0IFGjRoRHh5OrVq1uHz5cobbff/998TGxtKlSxdq1KihexmStPy+QVWrVmXu3LnMnz+f69ev4+DgwIwZM6hevbouplatWty5c4eiRYtSrlw53fKiRYuyatUqpk6dioeHB2XKlGHRokXKD7sBuLu7Y2RkRNGiRalTpw5Dhw4FoFevXpw/fx4PDw8cHR3p1asXEyZM4Ny5c5QurTaJgxBCCCFej1cdhSEnVa5cmV27dnHy5Ens7OyoUqUKkHbn+tKlSy/cLjAw8LWXTSq/OWDIkCEvXNeoUSMaNWr0wvVGRkZ6s7M9T6PRZPqAm6enJ56ennrLateu/dITr2TJkqxatUpv2ccff5wu7mX7JYQQQoj8zcrKKt3zTm8DqfyKXOXEGbXO8imKHXo62aiNYHH+QkmlOAfFOXxjzdS+ertvqPXhdtKqTZd8xjhBKa68Vu0Bg2JZmPdd9XHJAkZqkRZatWM48P4hxZzV9DCtm3kQYK/Yq8wYtWOoOm1x2aNLlOKGu41RigNomqDWv/aq4vTZxQz87GxhrVq+p/8ppRRn6N7EO6zUUsxKxzIXxbiRMWZKcZZGasNYfnZJ7RhuslKbpvxdpShQbei0VDyIB4hQiitubPiHrQxBeiFmj/T5FUIIIYQQ+Ya0/AohhBBC5CJv+2gPbztp+RVCCCGEEPmGVH6FEEIIIUS+Id0ehBBCCCFykdww1NnbTFp+hRBCCCFEviEtv0IIIYQQuYg88JY90vIrhBBCCCHyDWn5FUIIIYTIRWSOi+yRym8eFhoaSrNmzThw4ABOTk7p1o8ePZrjx49z6JBhZ8B6ncoUjFKKuxFtoxS3NrK4UlwbS7V8AzBXirtMrFKch7HaVFh/mxZSiquZojbb00NjtUurWRauwMaKd+kKmKrNVlctQe3G1aISTdUyVtTT7xOluJ/abVKKs1acTiw6xkIpTnXmtjknpqtlDMytOV4pTvV8uG/gvzwNE+KV4iq880gpzlpj2AKqTu5q1q6FcppGtmqzTva8/LdSnHEjT6W4hJkTlOIafd5fKW55x61KcYqTZ2KXoha4snq0UtyGc7ZqGYtcRbo95AAfHx+8vLyyvF1oaCgajYbQ0FCDl0mr1XL06FHCw8O5ePGiwdMXQgghxOuRqjXKsVdeJJXffCo4OJioqChq1arF4cOH33RxhBBCCCFyhFR+X6M5c+ag0Wjw9fUlMDAQjUaDRqPh7NmzAAQGBtKpUydcXV3p0qULwcHBAFy7dg2NRkOzZs0AaNasGRqNhsmTJ+vSvnPnDp9//jk1atSgXr16TJ8+Ha1W/R70oUOHcHFxoVGjRum6PYSEhPD5559Ts2ZNmjZtyrJly/TW79y5Ew8Pj3TlFkIIIcTrp9Ua5dgrL5LK72s0ZMgQgoKC6NevHzVq1CAoKIigoCCqVKnCtWvX6N27N61bt2bnzp00aNCAnj17Eh4eTvny5QkKCmLr1rS+UFu3biUoKIgRI0bo0h45ciQJCQns3LmT5cuXs3PnTvbu3atctsOHD1OrVi3c3NwIDg7m8ePHAMTFxdGrVy8KFy7Mtm3bmD59Or6+vuzatQuAo0ePMnLkSAYMGMDu3btxdXWlX79+xMer9bkTQghVpqbGei8Tk7Q/WSYm+suFECIr5IG318jCwkL3MjU1xcbmfw9hrV27lho1atCrVy8AvL29OXDgAJs2beKrr77CxsaGyMhIAAoWLKi3LcD8+fOxtrbm0aNHXL9+HSMjI65evUqLFpk/MHHv3j3++ecfRo4cyXvvvYeFhQVHjhyhQ4cOHD58mMePHzN58mQsLS1xdHRk0aJF2NnZAbBmzRratWtHmzZtABg8eDDVqlUjOTnZEIdMCCF0bG2tM1xuY2OVwyUR4u2i+JyseAGp/L4hoaGhlCtXTm9Z2bJllR9uO3z4MD4+PpiamlKtWjUsLCxITVX7Ojzr5jB48GCMjY1JSEjg0KFDdOjQgbCwMEqWLImlpaUuvl69err/h4WF4ebmpntfsGBBPDw8lPIVQoisiIiI0XtvYmKMjY0VkZFxpKTIn38hxKuR+0U5wMjIKF1/XCcnJ27duqW37NatWzg6OureGxunfTz/3jYsLIxx48YxZcoU9u/fz4IFCyhSpIhyeQ4fPkzdunXZtm0bW7ZsYfDgwfzxxx8kJibi4ODA/fv3SUxM1MXPnz+fGTNmAODg4EBISIhuXUpKCu3atSMoKEg5fyGEUJGcnKr3elbhTUnRXy5EfqPFKMdeeZFUfnNAhQoVuHTpEtevXyckJISTJ0/SrVs3Tp48ycqVKwkPD8fX15ebN2/yySf/G0O0RIkSFCxYkIMHD3L//n3++OMPkpKSiI2NJTU1lbi4OEJDQ5k1axbnzp1TeuAtISGB48eP88EHH+Dk5ISTkxMfffQRMTExBAUF0bRpU2xtbRk/fjxhYWEcP36cdevWodFoAOjevTtbtmxh586d3Lt3j++++467d+9SqVKl13b8hBBCCCEMRSq/OaBly5a0adOGzp0707p1aw4ePEilSpVYvnw527dvx8PDgz/++IOff/5Zr+XX1NSUOXPmsHbtWpo2bcqUKVNITU3lnXfeYeDAgXzzzTd07tyZxMREGjVqxLlz5zIty/Hjx4mLi6Nx48a6ZRUqVKBMmTIcOnQIKysrVqxYwePHj2nbti1jxoxh4MCBeHqmDYDeuHFjZs6cyaJFi2jZsiWBgYEsXboUW1sZCFwIIYTICananHvlRUbarIyPJcRr4FO6u3LsPRO1W5xRio8DtI1TO/1PW6jNjNbB5oFS3L6najPLPVCcaa18ktqtqcGRx5TiZtjWVYpTzBYA1UciVS9IJopxT40Me4lTzdfqDQ0RVClR7dy/aKHe9jHs5OTMg4BJbuOU4jqmxmQeBDidXKP33tTUGFtbayIiYvS6O6xwG6iUnuosYRYG/qv4VPF7XDAL50y04nltonjbWnV2PivFuKeKp1dBA/daSVY8hKpn//jHatfMp9HXFFM0jMMlP86xvJrc25xjeeUUeeBNCCGEECIXSc2jfXFzinR7EEIIIYQQ+YZUfoUQQgghRL4h3R6EEEIIIXKRvDoEWU6Rll8hhBBCCJFvSMuvEEIIIUQuIlO7ZI+0/AohhBBCiHxDWn6FEEIIIXIR6fObPdLyK4QQQggh8o181fKr0WhYtWoVtWvXTrfOz88PX19fDh48mOPlGjVqFAAzZ840WJoajSbD5QcOHMDJyclg+eS06glqv3ajjdVO7RDFb0DZJLVpjTZFqc3clqo445Pqr9NIxWnHDttVU4tTzLdAFjqeqU5e5aaNVor707igUlxZ1SmfFD1RPNaqn53qzFqqs+ldNVfLWTVfUJ+5bcKJqUpxc2uOV4rroxSlPiNbrOIxzMrMhSpUZ1mLzMJshLapamnGG3ifUxTjzA08S57i7hq8RU/1mpnTpM9v9uSryu/LtG7dmubNm7+WtF9W6QaYMGGCwfMMCgoCYO7cuVy+fJkffvgBgIIF1SoMQgghhBB5kVR+/5+5uTnm5uZvJG8rKyuDp2ljYwOk7ZepqanuvRBCCCFyN2n5zZ63qs/vpUuX6N69O9WrV6dRo0YsXboUSOsW0L9/f/r06UONGjXo0qULFy9e1G2n0WiYNWsWLVq0oHbt2kyYMIH4+Pgs5e3n54e7u3u65TExMUyaNIn69etTp04dxo4dS0xMjG59YGAgnp6euLi40KxZM7Zs2QJAQkICGo1G1/2gR48eaDQaPv/883R5jBo1Stf14Xnh4eEMGDAANzc3WrVqpUsbwMfHBy8vL7Zv3467uzs1atRg/Hi1W4lHjhzBxcWF6Oj/3V7+7rvv6Nixo648LzveiYmJzJs3jyZNmlCnTh1mzJhBUlKSUt5CCCGEEG/SW1X5HTx4MPb29uzdu5d58+bx3Xffce7cOSCtwvbhhx+yfft2ypUrx6BBg0hISNBt+2ybpUuXcvToURYtWmSQMo0dO5YzZ86wbNky1qxZQ3BwMHPmzAEgNjaWAQMGUK9ePQ4cOMCoUaMYO3YsDx48wMLCgqCgIF33g++//56goCDmz5+vlG9CQgKfffYZ1tbWbNmyha+++oqJEyeyd+9eXcyVK1dYt24dP/zwA1OmTGHjxo0EBgZmmnaDBg0oVKgQ+/bt0y3z9/fH09NT9/5lx3vevHn89ttvLFiwgBUrVrBnzx5dtwohhDAUU1NjvZeJSdqfLBMT/eVC5DdajHLslRe9Nd0etFot69evp3DhwoSFhXH79m1MTU25evUqANWrV6dLly4AjBw5kjp16nD27Fnc3NwA6NevH1WrVgXAy8uLdevWMWzYsGyV6fHjx+zatYu1a9dSuXJlAL799lsePXoEpHUp2LNnD4ULF+bmzZvcuXOH5ORkbt26RfHixfW6GhQoUCBLXQ8OHTrE/fv3mTp1KlZWVjg5OXHy5ElWrlyp65scHR3N/PnzKVWqFO+88w4zZswgLCws07RNTExo06YN27dvp0OHDpw/f56wsDA8PDx0MS863jVr1mTDhg0MGzaM6tWrA9C5c2e2b9+Ot7e38v4JIURmbG2tM1xuY2P4rmJCiPzjran8GhkZ8euvv7J69WpsbGxwcXHBzMyM1NS0ni2Ojo66WFtbWywsLLh//75u2fPrS5UqpbfuVYWGhgJQtmxZ3bJnleBnZf7xxx/Ztm0bJUuW1FUGU1JSDJJ3yZIl9foDlytXjt27d+veV6pUiVKlSunem5ubo9WqPWLboUMH2rdvz4MHD9i5cyfu7u4UKVJEt/5Fx/vx48fExcUxb948Fi5cCEBycrLucxJCCEOJiIjRe29iYoyNjRWRkXGkpMg1R+RfqqNfiIy9NZXfEydOsHDhQrZv306lSpVITU2lYcOGuvW3b9/W/f/Ro0ckJCRQokSJDNeHhYVRsmTJbJfpWQUwJCSE4sXThrDav38/y5cvZ926dezYsYOtW7eyY8cOSpQoQWxsLBs3bkyXjpGRkXKl9BknJyfu3btHfHw8lpaWANy6dUuvUlqoUKFX3TX+85//ULlyZXbu3MmuXbuYOHGi3voXHW87OzusrKyYPHkyrq6uQFplPy4u7pXLIoQQGUlOzriCm5KS+sJ1QgiRmbems1R0dDRGRkbExMRw/fp1Ro4cycOHD3WVxrNnz7J27VrCwsKYNWsWpUuXxtnZWbf9smXLOHfuHMHBwaxdu1bvFv6rKlq0KK1atWLatGlcvHiRq1evsmTJEsqUKaMrM0BUVBQXL15kyJAhAOkquhUqVODIkSM8ePCAEydOEBERkWneTZs2pXjx4owbN47Q0FD27NnDxo0b6dWrV7b365n27duzZMkSkpKSaNCggd66Fx1vIyMjPvnkEzZv3kxsbCzJycksXryYoUOHGqxcQgghhHixVIxy7JUXvTWV34YNG+Lp6clnn33GZ599RtmyZalcubLugbdmzZpx9OhR2rZty+3bt1m8eLHe0GRt2rRh+PDh9O3blyZNmjBw4ECDlGvatGk4OzvTu3dvvLy8qFq1KuPGpQ343r59e2rVqkWnTp3w9vbWdR14VuZnpk+fzp9//kmTJk34+uuv9UaLeBELCwtWrFhBdHQ07dq1Y/78+UycOJEWLVoYZL8gbWzjmJgY2rZti4mJ/sj9Lzvew4cPx8XFhX79+tGhQwcePXrEkiVLDFYuIYQQQojXxUib1fvxb0BmM6BlNomESC8kJITExEQ6derEL7/8QsWKFXXrXseMcy/jU7q7cmyc4s81xQnUKKR45zRKMd/eNUOU4n4+WVopTrX3eEHF/Z0RG6wUN97KOfMgIDoLP59Vb1LHKs5ypTprVslkxYwVhZuqlU/1s1OcMI4CilPk2SpmfD8Lnd4+1EYpxe0xUuuKNezkZKW4J1r9GRNNTY2xtbUmIiJGr9vD924DlNJTPYaGpvpHVvV7DBCh+N1T3WPVWfJUKU7GiZWB81UddDNB8TrzY/RZpbhbj9SurYaypVS3HMur/d11OZZXTnlr+vyKnDVt2jSOHTtGr1699Cq+QgghhBB5Wa6o/GbWAnnp0qUcKkne8f33379wXU61+AohhBAi6+Rxz+x5a/r8CiGEEEII8bpJ5VcIIYQQQuQbuaLbgxBCCCGESJNqlDeHIMsp0vIrhBBCCCHyDWn5FUIIIYTIRd76MWrfctLyK4QQQggh8g1p+RVCCCGEyEVkqLPsyRUzvOUFb2KWuidPnjBlyhQOHjyInZ0dn332Gd27q8+m9rzXOevbgwf6s0e9aBan7DB0mpJe9r3tZcxv6b2ONCW9tyu915GmpJemeHG12Q0NZaP9pzmWV+c7a3Msr5wiLb9viaCgIAoUKGDQNL/44gsSExPZtGkTjx8/ZsiQIRQvXpwWLVoYNB8hhBBC5JxUGewhW6Ty+5awsbExaHqnTp0iICCAAwcO4OTkBEDr1q3ZvHmzVH6FEEIIkW/JA28KAgIC0Gg0+Pr6Ur9+fZo0acLq1at16/fs2UPr1q2pWbMmffr04ebNm1nOQ6PREBAQkG75zp078fDwwNXVlS5duhAcHAxAZGQk7733Hn/99Zcu9vjx41SrVo0nT54QFBSEo6OjruIL0KxZM2rWrKl7v27dOpo3b06tWrX48ssvefDggW7dxYsX6dKlCy4uLvTp04enT5/qlSs4OJhu3bpRo0YNPD09deUSQgghxOuVilGOvfIiafnNguDgYDZs2MC5c+cYPnw45cqVw9TUlGHDhjFt2jTc3Nz44Ycf6NGjB/7+/hQsWDBb+R09epSRI0cyY8YM3n//fVauXEm/fv04cuQINjY2uLu7s337durVqweAv78/7u7uFClShDt37lCiRAm99OrXr0/9+vUB2Lx5M/Pnz+fbb7+lQoUKzJgxg/79+/PLL7+QkpLCoEGDqFGjBnPmzOHgwYNMmzaNDh06AHDv3j169erFxx9/zLx581i/fj19+/blwIEDFCqU9X5PxsZGGBv/7wtmYmKs968hGDpNSe/tS1PSe/vSlPTervReR5qSnsiNpPKbBaNGjaJ06dKULl2arVu3smvXLh49ekSbNm1o164dAN988w379+9n165dfPzxx9nKb82aNbRr1442bdoAMHjwYKpVq0ZycjIAHTp0YNiwYUycOBETExP27NnDrFmzAEhKSsLExOSFaf/888/07NmTJk2aAGkPstWpU4fAwEBMTU0JCwtj06ZNFCtWjB49erBlyxbdtlu3bsXS0pIRI0ZgYmLCkCFDWLlyJb///jsfffRRlvfTzs4aowxmq7GxscpyWpkxdJqS3tuXpqT39qUp6b1d6b2ONCW9nCUjFWSPVH6z4PkuBCVLliQsLIw7d+7odSUwMzPD0dGR0NDQbOcXFhaGm5ub7n3BggXx8PDQvW/QoAGWlpYcPHiQAgUKYGZmRsOGDQEoXLgwT5480Utv6dKl/Prrr+zevZvQ0FDKly+vW1e4cGFsbW0JDQ3F2toaS0tLihUrpltftmxZ3f/Dw8N58uSJ3sgUiYmJr7zPjx/HpGv5tbGxIjIyjpQUwzzhbOg0Jb3se9vLmN/Sex1pSnpvV3qvI01JL42trXW20xY5Ryq/WXD79m0qVaoEpFUAS5YsiYmJiV4f3+TkZMLCwvQqyq/KwcGBkJAQ3fuUlBQ8PT0ZN24ctWrVwtTUlDZt2rB9+3asra1p27atrrXXxcWFn3/+mYiICGxtbQG4desWjo6OQFpF/vlyP336lIiICBwdHTE1NSU+Pp4nT55QpEgRIK0iXqFCBV25qlSpwoIFC3Tbx8bG6vLJqtRULamp6X/HpqSkGmx4n9eVpqT39qUp6b19aUp6b1d6ryNNSS9nyWgP2SOdVrJg5syZhISE4O/vz19//YWHhwc9e/Zk27ZtbNu2jbCwMCZPnoypqSmtWrXKdn7du3dny5Yt7Ny5k3v37vHdd99x9+5dXQUcoH379hw9epT9+/fj6empW960aVPKlCnDiBEjuHHjBgcOHGDHjh20bdsWgJ49e7Jy5UqOHDnC7du3GT16NBqNhvfffx9nZ2fs7e2ZNWsWYWFhbNiwgb///luXdtu2bbl9+zaBgYGYmZlx7do1unbtSmBgYLb3WQghhBDidZKW3yyoU6cOXbt2xcTEhDFjxugeNJs7dy4+Pj6Eh4fj6urKzz//nO2H3QAaN27MzJkzWbRoEXfu3KFy5cosXbpUr4W1cuXKVKpUCVNTU71Ksbm5OStWrGDy5Mm0b9+eokWLMmzYMF3f5I8//pikpCSmTp3KkydPqFu3Lj/++COmpqaYmpqyaNEiJk2aROvWralevTqNGzfWpV2qVCl++uknZsyYwZQpU7C1tcXb21uvS4YQQgghXg+Z4S17ZIY3BQEBAfTo0YNLly696aLouXfvHkZGRgwaNIiOHTvStWvXN12kV+JTWn3WuSfGaqdrAa3aPaHiKWr5hin+TIwzUitf8RS18pkrfjsVk6NUktol85a54W8KqaYYp7gvHaweKcWNijXsb/zWqYUNml6E4oF5ZKz22RXWqiXYMCFeLWPgTwtLpTgLxfM1UvF7MuDE93rvXzS7VhGjB//eNEMzan6jFGdp4OGdIo3UPjuXBPV8i6YmKcWdtjBXiquYqFbGq4rXhsKKtTNT1XPmxc9v6/n03ZDMg4A//nZUilOtZHreXacYaRgrHV9tttZX0StsTY7llVOk20MutmPHDpo2bUqRIkX0ujwIIYQQIu/S5uArL5JuDwpq16791rX6AvTp04c+ffq86WIIIYQQQuQa0vIrhBBCCCHyDWn5FUIIIYTIRWSos+yRll8hhBBCCJFvSMuvEEIIIUQuIkOdZY+0/AohhBBCiHxDWn6FEEIIIXIRafnNHmn5FUIIIYQQ+Ya0/IpXFhERQefOnZkyZQq1a9fOkTzbGUUqxZ1JVpuFS3VCpdbGT5Xi9qSo5Ruj+LOzYnyyUtzj/2vvzuNi3v4/gL+mVaRulkL23G9RlJCLhLJLFG5C9l1ZskZlyZZ9yXqtl+tavrRdW7Jz3ZS1uLK2ryrSXtPn94df8zUKZz4zNS3vp0ePhz5z5j3vWZo5cz7nnLci259yvDLbDbM+LgUSbIGuzlh175fcPKZ2/0Udpna6CmyPISsHt/pM7bavYas6xloVcG7zeKZ2j/5twNSu5c9sFfIA4J9otmpY2YyvG9YKjKxYK7e5PvCU6e3KWuHVY8xtty96xdRuzlFLpnbCy+eZ2g2av5GpXcG5nUztflvN9nfC6sCLJkzteilkM7ULUawpTTplRsZ/QtUOjfwSXpKSkjBp0iRERUXJOxVCCCGEEGbU+SW8jB8/HiNGjJB3GoQQQki1U1SOP1URdX5JqWJjY6Gvr4/g4GA4OjrC2NgYdnZ2iI6OBgDs3bsXDg4Ocs6SEEIIIUQy1Pkl3+Xm5oZRo0bB19cXWVlZ2LNnDwCgWbNmcs6MEFLVKSkpiP0oKn7+yFJUFD9OSHVTGUZ+379/j5kzZ6J9+/aws7PDixcvmK4nFArh5eWFzp07o1evXrhw4YIUWZSOFryR77K3t8eAAQMAAH379sXjx4/lmxAhpNrQ0qpV6nENDbVyzoQQIgmO4+Dk5ASBQICzZ8/iyZMnmDlzJgICAlCrVul/18W2bduGgIAA7Ny5E8rKynB2dkazZs1gaGgos/yo80u+y9zcXPR/FRUVOWZCCKlu0tOzxH5XVFSAhoYaMjJyIBRW1dmIhPwY+z470rOysvru5VevXi1x7OHDh3j06BEuXbqEFi1aoGXLlvjrr78QFBSEIUOGfDNWfn4+jh8/DldXV5iZmQEAxo4dixMnTmDNmjXS3ZEv0Pki8l3q6uryToEQUk0VFhaJ/RR3eIVC8eOEkIrl+fPnaNKkCVq0aCE61r59ezx9+vS713v37h2ys7PRvXt3ia4nKRr5JYQQQgipRIrKcZ/f0kZ2f+TTp08l1gZpamri+fPnP7yesrIyGjZsKDqmoaGBhIQEiXP4Hhr5JYQQQgghMqOkpFRiqmSNGjWQk5Pzw+upqqpKfD2J85NpNFJlNG7cGBEREWLHnJ2dS7T7uk1Z+5Sr+uNGABQYv9ZpM84bzCpSZmonYPyLYq2Mlq2gyNROmWOLlydgGy7IZqw6JkmlLtaT03XUcpnaqRexvRYSIds3TcHPbIsu1ItuMLVTYXxOOMYHkPVxrqXP/vavyljLpkBOVadqoGKXuyp8foupXdErtqptAFCL8YlWatP9x40AIPYN822zEPynLWPLa0ytFBknubK9UwMNGrBVC817XzErvFX0yT5aWlp4//692LHMzMwfrh3S0tJCZmYmcnJyoKamxnw9SdHILyGEEEIIkRlTU1O8ePECGRn/+5Lx9OlTsekMpWnSpAnq16+PkJAQia4nKer8EkIIIYRUIhV9n189PT20atUKW7ZsQVFREZ4+fYorV67A0tISRUVFyMjIgFAoLHE9BQUFDBo0CNu3b0dmZibS0tJw5MgRWFpa8sykdNT5JYQQQgghMrVu3TrcuHEDXbp0wciRI2FrawsLCwvEx8ejU6dOePnyZanXc3Z2hqqqKrp3745evXqhVq1amD59ukxzozm/hBBCCCFEpgwMDHDx4kU8ePAAderUQZs2bQCUvqboS+rq6jh+/DgeP36M/Px8dOzYEUpKsu2uUueXEEIIIaQSKc8iF9JQU1MTK5bFSkFBAaampmWQ0f/HL7PIhBBCCCGEVDA08ksIIYQQUomUZ5GLqohGfgkhhBBCSLVBI7+Et8zMTLx9+xba2tpo0KCBvNMhhBBCqoWKXuSioqORX8LLmTNnYGFhATc3N/Tp0wceHh7yTokQQggh5Ido5JdI7O3bt1i/fj3+/PNP6Ovr482bN7C2toatrS3at28v7/QIIYSQKq2y7PZQUdHIL5FYfn4+Vq9eDX19fQCfK7moq6sjPT1dzpkRQgghhHwfdX5JqWJjY6Gvr4/g4GA4OjrC2NgYdnZ2iI6OhoGBAQYMGAAA4DgOhw4dgoqKCjp37iznrAkhhJCqrwhcuf1URdT5Jd/l5uaGUaNGwdfXF1lZWdizZ4/osjdv3sDc3BwbN27E1q1bUatWLTlmSgipapSUFMR+FBU/f2QpKoofJ4QQSdCcX/Jd9vb2olHevn374vHjx6LLWrZsiSNHjuDAgQOYN28ezp07Bx0dHTllSgiparS0Sv9CraGhVs6ZEFKx0G4P0qGvzOS7vixLqKKiInaZQCDAzz//jPXr16NmzZq4dOlSeadHCKnC0tOzxH4yMnIAABkZOWLHCSFEEjTyS75LXV29xLFz584hPj4eTk5OAD53gpWVlaGkRC8nQojsFBaWPr4lFBZ98zJCqoOqORO3/FBvhUisVatWWL58ObS1tdGjRw+cP38eSUlJsLKykndqhBBCCCHfRdMeiMTatWuHTZs24ciRI+jXrx+CgoJw+PBhqvJGCCGElIOicvypimjkl5SqcePGiIiIEDvm7Ows+n+/fv3Qr1+/8k4LdWpnM7V7k12Dqd0TVQFTu+FKeUzthIU1mdopg+12tYoKmNpFKykztasjZGoGoYAtv1wJTr6pMt7nt7m1mdrlqLLdrm2BBltDVp8+MDXLZBxaKGB8DAtyFJna/aXG9nFl/uMmIh8V2HJUZHyOZX3KNkMg24/owue3ZBpPqY0FU7uinxoyx8zbf4wt5ocktoACthds4eNAtni5bO/VjC8tCNleWsyvrcJ8tr8n1vdMUrlQ55cQQgghpBIpYvwyQEpH0x4IIYQQQki1QZ1fQgghhBBSbdC0B0IIIYSQSqSqlh0uLzTySwghhBBCqg0a+SWEEEIIqURo3Fc6NPJLCCGEEEKqDRr5JYQQQgipRKpq8YnyQiO/hBBCCCGk2qCRX0IIIYSQSoR2e5AOdX4JL87OzggMFC9z6evri9atW5fp7RYWspWkZC2ZmcVYFjWvgO1PpSbj7b5nTFDA+AbHWu0nSoktnjrHFlCFsZwtwH6aKUuBraVOIVs8WX9EcK8jftwI7K8FVcbHOusjWz1n1vurPIS9PLn6lcdM7TIEbLf+E+N9ZmWcxxav8CpjSeBXr6RJp2Q8xrLFCo1+Zo5Zl7HsbtGrUKZ2Sv0mMLXL3+vB1E6gXoutHVMrQJnxhV2DsV0BY3njd6w3TCoV6vwSXh49eoTDhw/DyMhIdKxWLbY3O0IIIYTwR11y6VDnl0gsJiYGmZmZ6NixI1RUVOSdDiGEEEIIM1rwRkoVGxsLfX19BAcHw9HREcbGxrCzs0N0dDQePnwIZWVlDBo0CG3btoWdnR3+/vtveadMCCGEVAtF5fhTFVHnl3yXm5sbRo0aBV9fX2RlZWHPnj14+fIlDAwMsGXLFgQGBqJTp06YMWMG0tLS5J0uIaQKUVJSEPtRVPz8kaWoKH6cEEIkQdMeyHfZ29tjwIABAIC+ffvi8ePHWLdunVibJUuW4MqVK7h8+TIcHBzkkSYhpArS0ip9HYGGhlo5Z0JIxUK7PUiHOr/ku8zNzUX//9b8XoFAgHr16iEhIaG80iKEVAPp6VlivysqKkBDQw0ZGTkQCqvqCVlCSFmj80Xku9TV1UscGzduHB4+fCj6/dOnT3j16hWaNm1anqkRQqq4wsIisZ/iDq9QKH6ckOqGK8efqog6v0RirVu3xqpVqxAaGooHDx7A2dkZmpqaoukRhBBCCCEVFU17IBJzcXHB6tWrMX36dKipqaFDhw44fvw47fNLCCGElAM63yEd6vySUjVu3BgREeKVrJydnUX/X7VqFVatWlXeaeFVTm2mdqqMlaaaCdmq/LwsLDn9ozQfVdhut5Axv1zGkzM5jGWSWueztYtRZmvXpICtHQBkM55n0lfIZGoXV1iTqd0rFdme4Cp8FsnUrgg6TO0Yi5PhWk4dpnbGbOEg0GLLDwAyGV+vWoylBtNlfM6xbhHbC3H7IrbKbbVk3LPI289WWY61ahsAjHnC9v77uwlbRTZNYQhTu0Qltud4bP93TO04aDO1Y31K6gsZ31vz2Lo/rSV4jyOVB3V+CSGEEEIqEa7KzsYtHzTnlxBCCCGEVBvU+SWEEEIIIdUGTXsghBBCCKlEaMGbdGjklxBCCCGEVBs08ksIIYQQUolQeWPp0MgvIYQQQgipNmjklxBCCCGkEqFxX+nQyC8hhBBCCKk2aOSXSGzJkiXw8fEpcdzMzAzHjrFVMuKriWIOU7sIjq3UcgFjda3mArbbfQu2qmNqjF/bcwVs309VmeOx3eE8xnGFGGXGBxCAMmOO2fls5eXilNkem5oyHiJR89rH1E45kK2yFqve6u+Z2i3OYnv8xr18wnzbimB7nnMZXw7srxo2j1RVmNrNOWrJ1E6pTXdp0imh6EMSW7tXocwxWSu3jX3MVgmOy2d7jxMosT3WUGCrnim4xHY/WEfq3qmwvbp6d8xgavfoHw3GWy5fNOdXOtT5JRJbvnw5li5dKnZs6tSpsLCwkFNGhBBCCCFsqPNLJKampgY1NTXR79euXUNKSgrGjRsnx6wIIYSQ6oH2+ZUOzfklpYqNjYW+vj6Cg4Ph6OgIY2Nj2NnZITo6Wqwdx3HYsmULZs+eDRUVxtNhhBBCCCFyQp1f8l1ubm4YNWoUfH19kZWVhT179ohdfu3aNWRnZ2PQoEFyypAQUlUpKSmI/Sgqfv7IUlQUP05IdcOV47+qiKY9kO+yt7fHgAEDAAB9+/bF48ePxS4/dOgQxo4dCyUleikRQmRLS6v0hasaGmqlHieEEBbUYyHfZW5uLvr/19Ma3r17h8ePH2PHjh3lnRYhpBpIT88S+11RUQEaGmrIyMiBUEizHkn1Ra9+6VDnl3yXurr6Ny/z9fXFL7/8grp165ZjRoSQ6qKwsPSPeKGw6JuXEULIj9BkKcLb1atX0b27bPfDJIQQQsj30Zxf6VDnl/CSmJiIV69eoXPnzvJOhRBCCCGEGU17IKVq3LgxIiIixI45OzuL/t+gQYMSl1ckrBWk0gVs32pZv/uyVjFLV2BrWINjO7WrwPg9NknGf/Gs9xdg/6adybFVhmpQwPbYJDNWgmNV+PASUzvWx0ad8ex9YT7b41JDwNZOwcKO7YYBKHO7mdqxVkxkrUjISi+f7UEUXj7PFjD2jRTZlIKxUqNSvwnMITWFIUztmCu3qbAtIiy8dJCpHRo0YWrG+tepyPiaqStka5efytZO1u+ZskKTfqRDI7+EEEIIIaTaoM4vIYQQQgipNirogD4hhBBCCClNEVc1F6KVFxr5JYQQQggh1QaN/BJCCCGEVCI07isdGvklhBBCCCHVBo38EkIIIYRUIkU09isVGvklhBBCCCHVBo38EkIIIYRUIlW17HB5oc4vkRjHcTh69CjOnj2L2NhYGBkZYfHixTAyMirz284XslWv4hjPabTPY3wDYYzHlh1Qg2MrhZWlwFjVi7HcD2M4MBZJYq7oBbBXPGtSM4upXZBQk6ndXUEG2w0zGqeswtQul/E184mxnZUu2+MyIaIBU7u89cvZbhiAGqfD1E4owetBll6rsD2Ig+ZvLONMSlf4OJCpXf5eD+aYiUpsD7ZAie31ylq5Tan/JLZ4z28xtWN9D2GtaPaR8e8pK5XtcaHT41UTPa9EYr///jt2794NV1dXXL58GUZGRhg9ejSioqLknRohhBBS5RWV409VRJ1fIrFTp05h/Pjx6Nq1K7S1tbFo0SLUqlUL169fl3dqhBBCCCHfRZ1fUqrY2Fjo6+sjODgYjo6OMDY2hp2dHaKjo5GWloYmTZqI2goEAigoKEBRkfWkPyGEEEL4KgJXbj9VEXV+yXe5ublh1KhR8PX1RVZWFvbs2YN27drh4sWL4P6/vOKVK1fw/v179OjRQ87ZEkKqEiUlBbEfRcXPH1mKiuLHCSFEErTgjXyXvb09BgwYAADo27cvHj9+jLVr12LWrFkYOnQotLW18ffff6N///5o2rSpnLMlhFQlWlq1Sj2uoaFWzpkQUrHQbg/Soc4v+S5zc3PR/1VUPq+ObdKkCfz9/REZGQk/Pz8EBwdj/vz58kqREFJFpaeL73ChqKgADQ01ZGTkQCisqktxCCFljTq/5LvU1dW/eZmuri78/f0xefJksTnAhBAiC4WFpXdwhcKib15GSHVAr37p0GQpwtvx48cBAFOnTpVzJoQQQgghbKjzS3h5//49vL294eHhgRo1asg7HUIIIaTa4Diu3H7Kws2bNzFw4EB06NABbm5uyMvLY77u3bt3MXjwYBgaGsLc3BxHjhyR+PZp2gMpVePGjRERESF2zNnZWfT/evXq4cGDB+WdFmqqFDC1Uy1QZWr3lrEylG4R20mmPMZqRekCthpq9YvY2r1QYbu/dRlLt+Ux7lqnJMH7IuubjbIy42PD+F45QEGD8ZbZKLW1ZGqXI7jB1I71IfyQWJOp3Wm1QqZ2FtPYz9h8DPJjaqfCeGdY/05YaTKeAy44t5OpneA/baXIphS52Wy3q176Ar/SjO3/jq0ha1nHBmxT11grtym1sWBqp8AFMbVjpc74WqjTju3vpO5NKZIhpYqIiMCsWbPg5OSEQYMGYcOGDdiyZQtcXV1/eN2YmBg4Oztj9uzZGDJkCO7du4f58+fDwMAAv/zyC3MO1PklhBBCCKlEynP/XSsrq+9efvXqVYniHTt2DEZGRpg+fToAwN3dHf3794eLiwtUVb8/kPP69WvMmDED48ePBwAMHDgQ3t7eePLkiUSdX5r2QAghhBBCysXz58/RvXt30e/a2trQ0tLCq1evfnjdXr16YcqUKaLfMzMzER8fjxYtWkiUA438EkIIIYSQUkk6sgsA8+bNw+3bt0u9TFNTE82aNStxLDExEUZGRhLdzt69e6Gjo4NevXpJdD3q/BJCCCGEVCIVfaszNzc35OTklHrZxIkTS0xvUFVVRXY229z4YsHBwThy5AgOHDgAZWVlia5LnV9CCCGEECIzdevW/e5lKSkpYscyMzNFhbRYxMXFYd68eZgzZ45Ec32L0ZxfQgghhJBKhCvHf7JmamqKkJAQ0e+ZmZl49+4dGjVqxHT9tLQ0TJs2DT169BCb/ysJ6vwSQgghhJByMXjwYAQFBeH+/fsAgJ07d0JLS0s03zcvLw+ZmZmlXjc/Px9TpkzBTz/9hCVLliArKwtZWVnIz8+XKAea9kAIIYQQUomU51ZnsmZgYIA5c+Zg4sSJUFdXR15eHnbs2AEFhc/jsfv370dQUBD8/EruL3779m2Eh4cDAMzMzETHbW1tsX79euYcqPNLCCGEEELKzeTJkzFw4EBERESgbdu2qFevnugyZ2dnsaJaX7KysipRgIsPAVdWtetIpZeeng57e3t4enqic+fOJS6/cuUKvLy8EBQkXYWenU3GSHV9abAWmmL9IyliDKjAGJA1P9ZvsWz18dix3l+A/T6zxtRkrFaXyljgipUq4/2Q9Rsr6+PCVrcKUJMgQcaHmhnrfRn1YI/Y70pKCtDSqoX09CwUFv5vvftfJjOY4mXI+LXAStZ/7wD764s1JuscyAIZv8dNf7SKqd2+9h5M7eoXst1wojLbHWG9H84xx9kaysiAJgPK7bYuxlwst9sqLzTnl5QqKSkJkyZNQlRUVKmXBwYGYsGCBShiLPtLCCGEEFIRUOeXlGr8+PEYMWJEqZfdv38fW7ZsgaOjYzlnRQghhJCicvypiqjzW03FxsZCX18fwcHBcHR0hLGxMezs7BAdHQ3gc9UUBweHUq/brFkz+Pj4oGXLluWZMiGEEEKI1KjzW825ublh1KhR8PX1RVZWFvbs+TzH7uvSg1/S0dGBmppaeaVICKmmlJQUxH4UFT9/ZCkqih8npLqpzPv8VgS020M1Z29vjwEDPk+c79u3Lx4/fizfhAgh5P9padUq9biGBn35JoTwR53fas7c3Fz0f0lKCxJCSFlLT88S+11RUQEaGmrIyMiBUFhVZyMS8mOVeZ/fioA6v9Wcurq6vFMghJBSfbmd2ZeEwqJvXkYIIT9CnV9CCCGEkEqESjRIh1YKEEIIIYSQaoNGfqupxo0blygRWFo5we+VEbSzs4OdnZ3McytPrH8ArFWzWE/Esla4Yq0mxpqfrCvasVY/koQiY0ztQrZ7nagk27e5Woz55cm4IpsKa2U5xttlfZwBQMgYU5KKf7Ik68ptkjw2LFgfP2UJbpf1vYZ1hIv1Pst6sglr5bZpMq4Ex0pOL+kfojm/0qGRX0IIIYQQUm1Q55cQQgghhFQbNO2BEEIIIaQSqarFJ8oLjfwSQgghhJBqg0Z+CSGEEEIqkSLa6kwqNPJLCCGEEEKqDRr5JYQQQgipRGjcVzo08ksIIYQQQqoNGvklvMXExCA9PR3/+c9/UKNGDXmnQwghhFQLVORCOtT5Jd+Unp4Oe3t7eHp6onPnzqLj+fn5mDVrFp49e4batWsjNTUVW7duRffu3cs8J9aqWawFn2owlivKYjxHwlrJSY3xdmVdxYm1glRuGVT0Yq0GV8AYs9epvkztLo8PZAvI6CfGt03W+6vEeH8zGZ/kGoy3W0fI/uEZq8yWJOvrsID5ltmMbh3D1O7AiyZM7ZSlSaYUrI8063MHAPUZn793KmzPXV0h2+1+ZHyS1RnfvOoWst0PWVeC28sYj7XKJqlcaNoDKVVSUhImTZqEqKioEpft2bMHBQUFuHHjBi5fvgwHBwesXr1aDlkSQggh1U8RuHL7qYqo80tKNX78eIwYMaLUy5o3bw53d3eoqKgAAIyNjfHhw4dyzI4QQgghhB/q/FZTsbGx0NfXR3BwMBwdHWFsbAw7OztER0cDAPbu3QsHB4dSrztkyBDo6ekBAD58+IAjR45g0KBB5ZY7IYQQUp1xHFduP1URdX6rOTc3N4waNQq+vr7IysrCnj17AADNmjX74XX37dsHCwsLfPjwAYsXLy7rVAkh1YySkoLYj6Li548sRUXx44QQIgl616jm7O3tMWDAALRo0QJ9+/ZFbGws83XHjh2LnTt3orCwEG5ubmWYJSGkOtLSqiX2o6GhBgDQ0FATO05IdUNzfqVDuz1Uc+bm5qL/F8/hZaWmpoYePXqgVq1aGDNmDNzd3aGhoSHrFAkh1VR6epbY74qKCtDQUENGRg6EQta9UAghRByN/FZz6urqEl9n9uzZePbsmeh3FRUVCAQCKCjQy4kQIjuFhUViP8UdXqFQ/Dgh1Q1Xjv+qIuqtEIlpa2tj4cKFePLkCaKiorBx40b07t2bV0eaEEIIIaQ80bQHIrFFixbBy8sL06ZNAwD07dsXixYtknNWhBBCSPVQVXdhKC8Cjh5BImc7m4xhbsta4U2T8UxoN9V0pnZX87WY2n1gLOulBLY70oSxFFY9YSFTuzwB28mef1XZ2tWS4IwzazE4HcaKT6yVqxIFbI8NK48uSUztblxvyNROkfG04r+qbHULb3Fsr+kjhplM7QDgj2dsldFYZQrY7vPU0L1ivyspKUBLqxbS07PEpjvcbTuNKV5DhVymdg0aZDC1Y1WYz/bcFTC2A4DcPLaxq2Yd2e5Lfirb7Walsq0NqdOO7e/u6O1GbDfMiLWy4nTGSnAXjNgWcw9JPMF2wzLSsWHZV1QtFppwu9xuq7zQyC8hhBBCSCVSVXdhKC8055cQQgghhFQb1PklhBBCCCHVBk17IIQQQgipRGi5lnRo5JcQQgghhFQbNPJLCCGEEFKJ0II36dDILyGEEEIIqTZo5JcQQgghpBKpqmWHywuN/BJCCCGEkGqDRn6/YGlpCScnJ9jZ2ck7Fejr6wMAatSoAT09PYwZM6Zc8tq5cye8vb2hoKCAunXromvXrpg3bx4aNmwoltfXrl69isaNG5d5fnWFbO0+MBZKulLAVrlNg7GSmUvSDaZ2O3V6MbUrZCyLFlKD7Q4veeDJ1C7S1IOpHXs9KkCZcaBCkXEVc10h24OjqiDbt7nLN9gqUikwPncFjLXvVBkfv/oKNZjanQxne+0DgEf6PaZ2N+oYMbUbmvmOqd1UplYAa6HBEMWaTO3y3rO1Y1WH8X3rHesfCYDWjNUfH/2jwdQuifHPhHXErO5NxniMfyesFSJZ/05YK7cNDF/NeMvlq4h2e5AKjfx+wd/fH9bW1vJOQ2Tjxo04d+4cLC0t4ebmhmPHjkl0fX19fQQHB0t8u//5z39w584dbNy4ES9evMDo0aORlZUFAAgJCUFISAhGjhwJU1NT0e+NGsm2RCUhhBBCSFmgzu8X1NXVoaLCVre8PNSsWRN6enpwcnLC6NGjsW/fvnLZ26941LdLly44dOgQkpOTERAQAADQ0NCAhoYGVFRUoKSkJPpdQYFeSoQQQkh54MrxX1VEPZYvWFpa4ty5c2LHgoKCMGjQILRr1w79+vXDlStXRJcVFhZi9erV6Nq1K9q3b4/JkycjKSkJABAbGwt9fX3ExsaK2u/cuROOjo6i358+fYpRo0bB1NQUdnZ2ePr06XdzS0lJEcW7f/8+7OzsYGxsDCsrK/j6+gIA8vLyoK+vL5qeMHbsWOjr62PatGmiWPn5+diyZQt69uyJX375BevWrUNBQenn0OrVqwdjY2M8evSI5SEkhBBCCKnQqPP7HVlZWZg7dy5sbGxw5coVjB07FvPnz0deXh4A4Ny5c/Dz88P+/ftFnc+tW7cyxU5KSsL48ePRtm1bXLhwAd27d8fkyZPx6dOnUts3aNAAAJCamors7GxMnz4dXbt2xdWrV7FkyRIsW7YMKSkpUFVVFU1FAIC9e/ciJCRELK8tW7bAx8cH27Ztw+HDh3H58mXs27fvm7k2aNAA79+/Z7pfhBBCCClbRRxXbj9VEXV+v0NJSQnKysooKChAzZo1MXr0aISEhEBVVRUAoKKiAo7jkJ+fD11dXezbtw+enmwLivz8/FCjRg0sWrQIDRo0gLOzM/Ly8nD79u1S2wsE/5vur6KigsuXL2P27NlIS0tDQkICCgsLERUVBeB/UxOAz1MnNDQ0ULPm5wUcHMfh5MmTmDp1KkxMTNC6dWvY29vjwoULvB8nQggpC0pKCmI/ioqfP7IUFcWPE0KIJGi3h+9QVVXFrl27sH//fhw6dAi6uroYO3YsRowYAQCwtrZGbGwsli9fjri4OHTq1AkLFizAzz//XGq87Oxs0f/j4+Px4cMHdO7cWXQsPz9fbJrEl5KTkwEA9evXh0AgwP79++Hv7w8dHR2YmJgAAITCHy8pTktLQ05ODrZs2YLt27cD+Dx9o6jo2+ulk5OTy2UnB0II+ZKWVq1Sj2toqJVzJoRULFV1Lm55oc7vd3z48AEqKio4cuQIhEIhrly5gjlz5qBt27YwMDBAZGQkrK2t4eTkhE+fPsHDwwMLFy6Er6+vaKT2y05lWFiY6HijRo3Qpk0bbNu2TXR5dnY2tLRK337o+vXr0NXVha6uLvz8/ODn54e//voL2trayM7OxqlTp0pcRyAQlFggV6dOHaipqWHVqlVo3749gM+d5pycnFJvNy0tDU+ePIGtrS37A0cIITKQnp4l9ruiogI0NNSQkZEDoZB1gzNCCBFH54u+4+PHj3B0dIS/vz/ev38v2tGgsLAQAHD+/Hk4OzsjLCwM2dnZUFBQEI2+1qtXDyoqKqK5t+fOncOTJ09EsW1sbBAdHY379+9DWVkZb968gYODA+7fvy9qk52djXfv3mHv3r04duwY5s6dCwDIzMwEAHz69AkvXryAs7MzAJTo6LZs2RI3b95ESkoKQkNDkZ6eDoFAgF9//RVnzpxBdnY2CgsLsXv3bsybN090vaKiIqSlpSE4OBiTJ09Gs2bNMGjQIFk+tIQQ8kOFhUViP8UdXqFQ/Dgh1Q3N+ZUOjfx+R7NmzbB+/Xrs3bsXy5YtQ506dTB//nwYGX3eyH3q1KlISUnB9OnT8enTJ+jr62PNmjUAPk+ZcHd3x9atW3H48GG0bdsWjo6OCAsLA/B5EdmBAwewbt06eHp6QktLC05OTmKdzIULF6JGjRpo3bo1tm/fDisrKwDA0KFD8ffff2P48OGoW7cuJkyYgPDwcISHh+OXX34RXX/t2rXw8PDA77//Dm1tbRw7dgxaWlpYsGABdu7ciSlTpiAjIwMdOnTAnj17RNd7+fIlunXrhnr16qF3796YM2eOaJ4zIYQQQkhlJuDKY+NYQr5jZ5MxzG3VGQd5WCu8sZ760GCs0DQ15TpTO9YKbzUY72+MEtufMWuFt92MFd4kKEjF3LYu40heOuNCp0wZn99qUMB2R2R9Wi1ema3G1WOF0qcwfa2DkH3e7DJZV3jLYqvwFvrirtjvSkoK0NKqhfT0LLER39ttp3191VLFK7M9K3ms5cQYlUmFt3y2drkCtjsj8wpvjPc5W04V3rQZ32dYK7wp12vJdsMy8nP9DuV2W69SHpTbbZUX6vwSQgghhFQi1PmVDs35JYQQQggh1QbN+SWEEEIIqUSq6kK08kIjv4QQQgghpNqgkV9CCCGEkEqEilxIh0Z+CSGEEEJItUEjv4QQQgghlQjHUXEXadDILyGEEEIIqTZo5JcQQgghpBIpojm/UqGRX0IIIYQQUm3QyC8hhBBCSCVCxXmlQyO/hBBCCCGk2qCRX0IIIYSQSoTm/EqHRn4JIYQQQki1QSO/hBBCCCGVCM35lQ51fkmVlZeXh3///RcFBQUlLuvUqZMcMiKEEEKIvFHnl1RZDg4OeP78eYnjAoEA//77rxwyKt3du3dx8eJFJCcnQ0dHB4MGDcIvv/wik9gfPnwAx3HQ0tLiHSMmJgaBgYGIjY3FtGnTEBAQgMmTJ0MgEMgkR2kUFRXB398fQ4YMwadPn7B7924UFhZi1qxZvO/zhw8f8McffyAuLq7E6Mq6detkkXaFk5+fj4KCAtSqVQuhoaH4+eefoampKe+0xGRmZuLOnTuIjY2Fra0tgoODMXDgQLnm9OTJE6Snp6Nz585QU1NDSkoKLl26BEVFRVhZWUFHR4c51osXL6Cvry/6u0pPT0dgYCDi4+PRvHlz9O/fH2pqahLlN3bsWPTs2ROOjo5QVlaW6LrfEhMTg2vXrkFJSQkWFhZo0qSJTOKWpczMTAgEAtSqVUveqchMEY38SoXm/JIqKzU1FWfOnMGLFy/EfipSx/f48eOYNm0a3r9/j0aNGiEpKQmTJ0/Gn3/+ySteaGgorKysUFBQgKtXr8Lc3BzdunWDn58fr3g3b97EgAEDcPr0aZw5cwZZWVk4ceIEtm3bxitesZiYGBw8eBArV65EYmIifvvtN16n8Tw9PbFt2zYUFRVh06ZNuH37NoKDg+Hu7s47t7lz5+L48ePIy8vjHeNL2dnZ8PT0xL179wAAo0ePxtKlS5GdnS2T+NJ6+vQpevTogZs3bwIAVq9ejf79++PZs2e84gmFQuzevRuDBg1C+/btERERgUGDBiEmJoZ3jmFhYbCyssKSJUuwdetWpKWlwcPDA0ePHuUdU1orVqyAg4MDFi1ahD59+iA0NBS2trY4duwY/vjjD1hbWyM8PJw5nq2tLbKysgAA9+7dQ69evbBv3z78888/WLVqFQYNGoT4+HiJcrx//z4CAwMxcOBA/PXXXygqkq4k7rNnzzB48GDs378fe/fuRb9+/TB//nyJ8yord+/exYABA/DLL79g9erVyM/Px6JFi9CpUyeYmZlhzpw5FebvjsgZR0gVdfbsWW7UqFHcqVOnOB8fH7GfiqJXr17cxYsXxY6dP3+e69mzJ694tra23NatWzmO47hff/2VO3z4MHf06FGub9++vOINHDiQO3HiBMdxHNexY0cuLi6OCwkJ4bp3784rHsdx3I0bNzhDQ0Oub9++nKGhIff69WuuZ8+e3JYtWySO9csvv3DPnz/nOI7junXrxsXGxnLv3r3jOnTowDs/Y2Nj7t9//+V9/a8tW7aMs7a25iIiIjiO47grV65ww4YN45YvXy6z25DGyJEjufXr13NZWVkcx3GcUCjktmzZwo0aNYpXvHXr1nE9e/bk9uzZw5mYmHDR0dHcokWLuClTpvDO0c7Ojtu6dStXUFAgeh3euHGDs7KyYo5x//59ph8WiYmJXNu2bbnXr19zHMdxBw8e5Nq0acMtWbJE1ObgwYPc6NGjmfPT19fnPn36JLq/69atE12WkZHBjRs3jnNxcWGO92XMq1evctbW1pylpSV39OhRLjU1VaI4xcaOHcutX79e9HtgYCBnaGjIGRsbczt37uTy8vJ4xZWF3NxcrmPHjtzmzZu5oKAgbsyYMZy1tTU3YMAALiQkhHvy5Ann6OhYYf7upKWjaVBuP1URTXsgFUZISAhTO9b5uvv27cP79++RkJAgdlwgEGDo0KGSpvdDb968wbt379C7d2/m6+Tn56Nt27Zix9q1a4fCwkLeOezZswc5OTl4+fIlTpw4gbS0NGzevJlXvOTkZFhaWooda9KkCXJycnjFA4ANGzZg2bJlcHBwQKdOnaCmpoaNGzfCxcUF8+bNkyhWQUEBNDU1ER0dDRUVFejq6uLt27dQUOB/Uqtly5b48OED7+t/7dq1azh27Bj09PQAAL1790bz5s0xbtw4rFixQma3w9eLFy+wY8cO1KxZEwCgoKCAUaNG4dixY7zi+fv749ChQzAwMMDBgwehqKiIGTNmYNiwYbxzjIyMxO7du6Gk9L+PrNatWyMtLY05hpubG6KjowF8e7EQ65SopKQktGzZUvScTpw4EYcOHcLkyZNFbQYNGoSdO3cy5/flNKJXr15h9+7dot9r164NZ2dnuLi4MMf7kqWlJSwtLXH16lUcPnwYGzZsQJcuXdC9e3eYmZnBwMCAKU5YWJjYe0mfPn3QtWtXGBkZwdfXF35+fvDw8ED37t2Z4vXp04dpNPrq1as/bPPy5UvUq1dP9Bh16NABPXr0wM6dO9GxY0cAn88UOTg48Pq7i4+PR6NGjSS+HqmYqPNLKgxHR0fR/4s/CL78kCo+xjptoUaNGjh58iR+/vlnGWb5mampKW7dugV1dXXRsaKiIixbtkyizq+DgwM8PT3h6uqKRo0aITo6Gl5eXpgwYQKvvLS1tXH//n3k5eWhdevWUFRUxPPnz6Gtrc0rnomJCTZs2IDly5eLHv+AgACYmJjwigfItkPdsWNHuLi4gOM4dOvWDenp6di1a5dU+a1ZswZLly7FjBkz0LVrV7HnmA8FBQUIhUKxY1//zsLR0ZFpnvXvv/8uUVxdXV2EhISIzZ998OABGjZsKHGOAKCqqor8/HyxYwUFBahduzaveABgYGCAI0eOYNGiRaJjd+/eZe60AcDJkycxefJk/Prrr7C3t+edC/D5C1JMTAxev36NVq1aAfj8uLds2VLU5tatWxJ1ljiOQ3h4ODp06IAGDRogNTVVbM4wx3ES/418/XqxsrKClZUV3r17Bz8/P5w5cwbr1q1jfk/V1dXF69evUa9ePdGxlJQUDB06FDNnzsSxY8fg4uLCPJCxaNEiLFy4EGPHjkWLFi3Y71gpfvrpJ3z69AlCoRCKior46aefMGvWLHTu3FnU5uPHj7zjW1lZISQkROr3A1n51hc4woY6v6TCePHihej/Bw4cwN9//w1XV1c0a9YMMTEx2LBhA9q1a8ccr1WrVnB2dkbfvn2hoqIiOi4QCDBr1iypci1t3pimpqbE80SLR4aK51sCn9/Ubt++jY0bNwJg7+wDwNSpU7Fw4UIoKipi48aNCAsLw5w5czB37lyJ8iq2bNkyTJw4EV27doVQKMTIkSOhpKSEw4cP84oHyLZDvWrVKmzYsAGqqqqYN28eIiMjkZSUhLVr10oUx8DAQKyjwHEcZs+eXaLzwGe+eJ8+fbBkyRK4u7ujadOmiImJwZo1a9C/f3+J4nz5IS5LM2bMwOLFi3Hv3j1Rfn5+frwX9w0ePBjOzs6YOnUqhEIhHj16hDNnzmDIkCG8c1y8eDEmTJiAgIAAZGdnY+7cuYiKisKBAweYY2hpaWH37t2YMGECunbtKtVCLXV1dSxZsgQODg5YvXo1+vXrJ9bx3bVrF/bt2yfRGZc+ffpg4cKFyMzMhLKyMtavXy/6IvPo0SNer5lvdZBatGiBuXPnYu7cuUhKSmKON2zYMMyZMwcTJ05E48aNcfHiRRQVFaFp06YAgAkTJsDGxoY5Xp8+fbBhwwZs27YNPj4+UFVVZb7u15o0aYLWrVtjypQpcHd3R4sWLTB16lTR5c+fP4erqyvvRZLU2axaBBw9o6QC6ty5M86ePYvGjRuLjsXGxmLkyJG4c+cOU4wvR5K/JBAIJB4dK+bt7Q3g84fblClTxDrVwcHBqFGjBn777TfmePfv3/9hGzMzM4lyjIyMhIqKCho1aoTk5GS8fftWqt0jcnJycP36ddFpv549e4pOkfMRGRmJiRMnIjk5GUKhEPXr1xd1qJs1a8Y7rjRYngdA8ucC+PxFaenSpbh06ZKoM92/f3+sXbtW4tX7ZeXWrVuiHS4aNWqEMWPGwMLCgles/Px8bNmyBadOnUJOTg7U1NRgb2+P+fPnS7XjQFJSEvz8/JCQkICGDRtiyJAhEu2mUBbevXuHvLy8EiPQPj4++Pnnn2FkZCRxzNjYWDx8+BCvXr3C/PnzAQDjx49H69at4eLiItFj6OrqihUrVkjVqfza0aNHcfr0aaSlpcHY2Bju7u7Q1dWVKmZISAiaN2+O+vXrSxUnPz8fe/fuRYsWLTB48GCxy+bMmQNtbW0sWrSI1+vQwMAAHTp0gKKi4nfb8f1skZSOJvtZD2klfXzx40aVDHV+SYXUq1cvLFq0CAMGDBAdCwwMxJo1a8RGSctbcYc6NDQU7du3F70RKigooGXLlnByckLdunXlll9lIesOtSz5+/vD0tKy1NOb2dnZvPNMS0tDXFwcdHV1UadOHWnTrBTS0tIq5H2NiYnBnj17St3Ojk/npSzi7d69G/Hx8eA4ThRTmi/uZZ2jtPEqOgMDA4wcOVJswKM0S5cuLZd86mvql8vtAEDKxwiZx7x58ya8vLyQlJSEAQMGwN3dndeXtF27duGff/6ReI0CTXsgFdLEiROxYMEC+Pr6QldXF4mJibh9+7ZoJITFpUuXYGZmJtMP3+I/MAMDA+zfv7/CzP8q5urq+s3L+JzGzsrKwuHDhzFz5kwkJydjzZo1KCwshKurq+hUJx9qamoy2aP18OHDGDBgABo0aCB1rGLbtm2DiYkJ3r59i+bNm0NDQwPA5y3ATpw4gVWrVmH48OESx42Li0NsbCyaNWuGp0+fSjSFp6xdvnwZzZs3h76+Pry8vKCvry/VotD8/HyEhYUhOTkZDRo0QNu2bcUWq7H43mv5S3xe13PnzkVWVlaJKVF8VfR4ZRFz3rx5yMzMlGmOFZlAIMCCBQsq3Ht+ZRQREYFZs2bByckJgwYNwoYNG7Blyxbmv/liz58/x549e9C+fXuJc6DOL6mQHB0d0bJlS5w/fx4xMTGoV68evL290aNHD+YY69evx7p169ClSxeZ52dsbPzD01/ylp2djWfPniE5OVlsBF0Sbm5uiIqKwsyZM7FhwwZ8+PABioqK8PDwwJEjR5jjlNVirT///BN6enoy7fwOHjwYQ4YMQU5ODmrUqIFVq1bBxsYG586dg5eXFw4ePChR5zc6OhqTJ09GdHQ0FBQU4OPjAwcHB3h5ecHa2pp3nhzHiaaOFP8eHh6Ofv36SRTn0KFD8Pb2xq5duwAAKioqWLt2LT58+IDx48dLnFdERARmzpyJuLg4qKqqIi8vD02bNsXu3btFi8Mk9fHjR1y7dg2GhoZo1qwZ4uLi8OTJE/Ts2ZNXvDdv3sDPz09m02wqeryyiPn69WuZ51iRVbST5BUtH0kcO3YMRkZGmD59OgDA3d0d/fv3h4uLC/Pob/EeznwXSlLnl1RY3bp1Q7du3Xhf38bGBr6+vmXS+T116hTv6345D0/WI7VfX6eoqAi7du3ivTXZnTt3cPLkSQgEAlElutzcXAwaNEiiOF8u1oqLi0NAQAAsLS1FHZkrV65IvJgHAEaOHIk//vgD3bt3l1nFuUuXLmHp0qUYMmQI7t+/D2dnZ/To0QO5ubno1q0bPDw8JIrn5uaGDh064NixY7C2tkbt2rXh5eWFPXv28O783r59Gy4uLsjMzBQ7rqioKHHn9/jx49i1a5fo72TevHno0qUL3NzceHV+V6xYATMzMyxevBg//fQTUlNT4eXlBXd3d4mKt3z5Wp40aRKWLVsmNo//5MmTuHLlisT5AUDbtm0REREhs45bRY9XFjFlEU/W21vKOt6XvlyQXd1YWVl993KWrei+9Pz5c7GY2tra0NLSwqtXr5jnyW/ZsgUaGhqwtbWFv7+/RLcPUOeXVGF2dnZwd3fHokWLMG3aNLHFRdLu1yjr+XNlRUFBAc7OzrCxsRHbJkqS6ysqKuLly5f46aefUKdOHURERKBGjRoSxXFychL9f+TIkdiwYYPYtIcrV67g4MGDEudnZGSE69evY+zYsZg8ebLYfFw+H3DA57KynTp1goqKCkxNTVFYWIjU1FRRbEm3KQsPD8fGjRvFFmd16tRJqip0GzZswJw5c/D+/XskJSVh0qRJWLx4MUaNGiVxrIyMjBKjJ02bNuW9LdTLly+xZcsW/PTTTwCAunXrYu7cuRLtAvC1hw8fwtPTU+yYhYWFaEcUSTk7O8Pd3R1xcXHo2rWr2DZsfN4bKnq8ipqjLPdeLot4X8vJyUFAQAAePXqE9+/fAwDq168PMzMzDBw4sFynf1T08sbz5s3D7du3S71MU1OzxJcmTU1NJCYmMnV+Q0JCcPbsWfj4+DAvVv4adX5JheHr6wtra2soKSnB19f3m+1Y5yJ+OZLo7+8PgUAAjuOkevMrJs38uS9HtPhuJ8WK4ziEhIRIVAzgS927d8fUqVPBcRx69+6NxMRErFu3TqrdIyIiIkrMdzUwMMCrV68kjjV27FjR/78c9ZHmOR4yZAgmTJgAU1NTPH/+HOrq6rhy5QoKCgrw8OFDifdMbt68OS5evCg2ivr8+XOp9jWNjo7GwIEDkZCQgBUrVqBVq1Zwc3ODh4eHxMUkOnbsiO3bt2PlypVQUVFBQUEBdu7cCVNTU165mZiY4M6dOxgxYoTo2M2bN0WFBvjQ19fH9u3bsXjxYtSpUwcZGRnYtWsX72kUxa8bLy8vAJD6vaGix6uoOcpy7+WyiPelxMREjBkzBklJSTA2NoaOjg4EAgFiY2Nx/vx5HDlyBL///rtojUBVIunILvD5i8i3zjhOnDixxPQGVVVVptLTmZmZWLx4MZYtW4bGjRtT55dUfjt27ECfPn2gpKSEHTt2lNpGkupsfP5gWZXFnDxZ+Hq/2mJ89zVeuXIl9u/fD1VVVYwfPx6RkZHQ0dHB4sWLeedoamoKDw8PuLi4oFGjRkhKSsLWrVt57fNbFqcily5dijZt2iA8PBwTJ05Eq1atsGHDBqxcuRKLFi0S63CzmDt3LmbMmIGAgADk5uZi/fr1CA4O5l11DwAaN26MS5cuYcSIEYiOjkZ2djZ0dHQQGxsrcaxly5ZhwoQJ6NKlC3R0dJCcnAwtLS0cOnSIV25KSkrw8PDA2bNnoauri5iYGISFhcHKyko0zUfSL30rV67EzJkz0a1bN9SoUQO5ublo2LChaJ6ypGT93lDR45VFTFnEk+Xey2UR70tbt25FrVq1cOPGjRI7+qSlpWHKlCnYsWMH3NzcZHab31PR5/x+b9ejunXrIiUlRexYZmYm00DS2rVr0a5dO6mrtNJWZ4Tw4OjoCEdHR/Tt21feqYj5+luwQCBAw4YNxfZLlreEhATMmzcPjx8/Fo0WtW3bFlu3bq1QeZaG71Znz58/x+nTpxEfH4+GDRvC3t4ebdq04Z1HYGAgXFxccOvWLaxfvx5hYWEAAB0dHYkWIhbLzc0V23quV69eEk9tKcayYpvPGY+CggI8efIEycnJqF+/Ptq1ayfT/WsJ+R5zc3Ns2rTpm2e9goODsWjRonLbilNLnd9ZDz7SM1/LNN7GjRsRHx+PrVu3Avjc8f3ll19w4sSJH+6Co6+vj5o1a4oWnBcUFKCgoAA1a9aEv78/85Qb6vySKi0zMxN37txBbGwsbG1tERwcLJMttu7fvw93d3eMHDlS6vlz8fHxpe6VyXfOqqxlZWXh0qVLiI2NRePGjdG/f3/UqlVL6rgJCQlISUlBvXr1pJqDnZqaisjISBQVFQH4364HEydOlDrHslR8ipivmJgY6OjooLCwEEeOHEFmZibGjx/Pu5R1scLCQoSEhOD69evltmcpC47jEBwcjNjYWOjq6qJz585QUFCQd1pERir63suGhoa4c+cOtLS0Sr08LS0N3bt3x7NnzySOzYemul653A4AfMx8I9N4L168wIgRI3Dw4EGYmZlh3bp1uHDhAm7evAkFBQXk5eWhoKCg1G3lvj67dfnyZVy+fBlbtmxBgwYNmLdUpGkPpMoKCwvD5MmTRX9IPXr0gIeHB1JSUjBu3DipYstq/tzu3btLneLBdx5eYGAgrKysxLZhCw4OxpkzZ7Bp0yaJ40VFRWHs2LEoLCyErq4u4uLisHPnThw9elSqKR9ZWVn4+++/pe5Q+/r6ws3NTWy7L4FAAE1NTbl2fvPy8rBt2zY8ffoUenp6cHFxES0Ay8zMxH//+18cP34cQUFBvG+j+JRuQUEBxowZI9Vcw/T0dNy8eRPXr1/H3bt3kZmZiWbNmvHq/I4YMQJ2dnainS1k4f3795g6dSpevHgBLS0tpKeni/barlevnkxug8hXRd8rWSgUYty4cd/c4lIoFIq+gJPvMzAwEJXJVldXR15eHnbs2CH6Mrt//34EBQXBz8+vxHW/PjuopaUFVVVVic8a0sgvqbKGDRuG7t27w8nJCV26dIGfnx9evXoFT09PqTodwOftur5FklKfnTt3xvTp0zF69GiZvEG3bt0aISEhYt+YExIS0K9fPzx9+lTieJMnT4auri7c3d2hpKQEoVCIlStXIj4+HgcOHOCVY2kdamVlZV4d6j59+mDx4sVISEjAmzdvsHjxYjg5OaF3795wcHDglZ8srF69GpcuXYK1tTX+/vtvNG3aFIsXL8axY8dw9uxZ1KhRA6NGjZJoLnbxB8SjR49gaGiIhQsXYt26dTh58iQAoE2bNti5cyfzKPrLly9x48YNXLt2DWFhYVBRUUF+fj5mzpyJgQMH8l6Qt2PHDly8eBHx8fGwtLSEra2t1FvRzZ07F/n5+Vi/fj00NDTw8eNHuLq6QlVVVXTqlFRuJiYmMl1HIet4xaXtf+TLnW3KkkatluVyOwCQkfW2TOLGx8cjIiICbdu2LfcvsdT5JVVWhw4dcOHCBejo6KBTp07w8/ODkpIS+vfvj4cPH8rsdtLS0qChoYGioiKJO7Dm5ub4888/ZbYww8DAAKGhoWKd36dPn2L69On4+++/JY7XsWNHBAQEoGHDhqJj8fHxsLGxQWhoKK8cv+5QFxYWYtWqVbw61CYmJrh27RpSU1OxcOFC+Pr64sWLF5g9ezYCAwOZ41hZWcHf3x+1atWCpaXlNztqrIt8evbsidWrV8Pc3BxJSUno1asXBAIBmjVrhvHjx2Po0KESv1aWL1+O+/fvo1evXrh9+zZq1aqF9PR0zJ07FxzHYc+ePWjdujU2bNjww1iWlpZISEhAx44dYWFhgY4dO8LIyAhdu3aFn5+f1FsBAsCzZ89w4cIFXLx4EYWFhRgyZAhsbW3RsqXkH9qdO3fGf//7X7G/k+joaIwYMQLBwcFS50rkT9brKCrqugxZqQqdX3miaQ+kyjIwMMCRI0fE9re9e/cuDAwMpI6dk5OD1atX48KFC8jLy8O5c+cwbtw4HDp0CIaGhsxxJk+eDC8vL2zatIn3AiMAog6bQCCAjY2NqPPGcRwSExMxe/ZsXnEbNmyIBw8eiBVjePjwoVhnWFKPHz+Gp6enaG6WkpISpk+fzmsfWD09PRw9ehROTk5ITExEamoqVFRURHtwsnJychItnnJ2dpY4j68lJyeLFrTp6OigZs2a8PDwkGqv26tXr+LAgQMwMDDApEmTYG5ujr1794qqHjZo0ID5ee7cuTNu376Np0+fiubY5efnSz0P+UuGhoZo0KAB6tevjz179uDw4cP4448/MG7cOMyZM0eiWD/99BPevXsn1vl99+4dNDU1ZZIrkb+KuA/xtwiFQuzbtw8XLlxAXFwcTp48CRcXF+zdu1emO0x8T0Xf57eio5FfUmU9ffoUEyZMgJqaGtLT02FoaIioqCgcOHAAbdu2lSr2kiVLEBERgQkTJmDFihXw9/fHn3/+iSdPnuD48ePfve7Xq+GLNwJv37692IitJCvifXx8wHEcli1bBnd3d1FBD4FAgJYtW/5wBe23XL58GQsWLICNjQ2aN2+OqKgo+Pv7Y/PmzejTpw+vmIMHD8a0adPEOtR//fUX9u3bh4CAAIli3b9/HzNmzEBgYCD27t0rqvRjZmaGnTt38spPFr6efmJmZgY/Pz+pvjR8HbNTp07w8fERzXX78OEDunbtiufPnzPHfPr0Ka5fv44bN26I5ph37doVvXv3Ro8ePSSawlMsOzsbgYGBCAgIQHBwMPT19TF06FBYW1sjLS0Nw4cPx6NHjySKeeLECWzfvh3jx49Hs2bNEBUVhSNHjmDevHkYOXKkxDmSiufrQQlp9yGWdbwvrV+/HpcvX4a9vT327dsHf39/eHt7Iz09Hfv375cqNiv1mvz3CZdUZva7crut8kKdX1KlJSUlwc/PDwkJCWjYsCGGDBkiVmmLLzMzM5w5cwbNmjUTTangOA7W1tY//GBn2QoK4LcdVGnTHqR17949HD16VLQ4bdy4cVKVjJZ1hzonJwcqKioQCAQICAhAZmYmbG1teW1JJisGBgaoXbu2aBQ1IyMD6urqJXYnkGSD9tatW+P69etQV1cHx3GwtLTEiRMnRB3qjIwMWFlZ8f5gT0pKwo0bN3D9+nUEBwcjNzeXVywTExNoaGjA2toatra2+Pnnn0WXxcbGYvXq1di7d6/Ecc+cOYPff/9d9DocO3asWCENUrnJah1FWcX7UteuXXHo0CEYGBiI3v/z8/MxbNgwPHjwQKrYrGrVbF4utwMAWdmR5XZb5YU6v6TKevbsGdq0aSN2Gvfhw4e4fv065s+fL1Xsvn37YsWKFejatavozS81NRUuLi64cuWKtKnzdvLkSQwfPpx5uxd5kXWHuqLx8fFhamdra8sc8+sCJl9PUZDVqBYA5Ofn4969e6IpFZK4desWzM3NaRsyUmX16tUL27dvR7t27UTv/1lZWZgyZQpu3LhRLjlQ51c6FfsTkhApDB8+vMTOB/Xr18fx48el7vyOHDkSTk5OsLe3R2FhIS5evAh/f3+MHj1a4lhxcXGikYhr166hqKgIvXv35p1XaVJSUlC/fn1eMe/evYuLFy8iOTkZOjo6GDRokFTljQGgS5cuMunsFs+9O3/+POLj40Vz7/bs2YOmTZsyx5H1aPy3OrVpaWnQ0tLiNa+Wz96kfKmoqEjU8S0ujgEAFhYWMsvjypUrOHPmDDp06IBp06YBAAYOHAhdXV0MGTJEbOoMIeVl8ODBcHZ2xtSpUyEUCvHo0SOcOXMGQ4YMKbccaM6vdKjzS6qs0k5qFBYWQllZWerYEyZMgLKyMv78809wHIf//ve/cHBwgKOjo0RxTp06hZUrV+LJkyc4dOgQdu3aBYFAgNGjR4st1GMVExODtWvX4s2bN2J73yYnJyM8PFzieMePH8f69ethbm6ORo0aIT4+HpMnT8ayZcsk2kqM4zgcPXoUZ86cgYWFhag8crt27dC4cWMMGTIEU6ZMkXi0cOPGjWJz72rWrAkjIyOsXr1aorl3GRkZYr/fvHkTnTt3lmoRYrFPnz5h9erVuHjxIgoKCqCkpIS+ffvC3d1dtPcvCzMzM6lzKStWVlYlvmhK648//sCOHTtgbW0tNkffzs4OUVFRcHd3x8ePH3l94SREGk5OTsjPz8emTZuQk5MDNzc32Nvb8y4jT8ofTXsgVY6joyMEAgFCQkJgamoq2pSc4zi8fPkSgwcPLrf66z9iaWmJZcuWwcrKCv3798fq1asBAHPmzMHdu3cljjdu3Dhoa2sjJycHhYWF6N69O3bt2oXx48dj6tSpvPJbtGgR+vfvLzp24cIFbNy4EdevX2eOs2PHDvj5+WH06NH45ZdfRDshXLhwAVFRUfjjjz9gb28v8U4LZTX3rjiWLLb8cnFxwevXrzF9+nQ0btwYCQkJ2LdvH5o1aya3PWrj4+OZ2rHe/7KYa96nTx+sWbPmm53+q1evYt26dVLv2U2INNLS0lCnTp1yv101NdnsX8wiJyeq3G6rvNDIL6lyOnfuDACizm/xFlYCgQCjRo0S68jx5e7uDl9fXxQWFpa4TJI5l2lpaTAxMUFaWhrS09PRsWNHJCQkIDs7m1deYWFhuHz5Mt69e4ddu3Zh9OjRqFu3Lv744w9end/8/PwSO2O0a9eu1Pv9PWfPnsW+fftKrMAuLjXdsWNHLFiwQOLOr6qqKvLz88WOFRQUyKyymCzcunULp06dgp7e53Kk7dq1Q6tWreS6S8H39jIG+M0fnjZt2jerXxWTZOrG+/fvUbdu3W9erqenh9TUVOZ4hJSF4o7vx48fkZWVJZMvzCxo3FI61PklVU5xhR1vb29MmzZNpqNRxS5fvgxXV1e0atVKqjitWrXC7t27UVhYCFNTUwiFQly4cIF3dS11dXXExsbC0NAQL1++BPC5Y8mnTC0AODg4wNPTE66urmjUqBGio6Ph5eWFCRMmSBQnOztbNA2jNJqamsjKypI4v7Kae1e8Z7IsNGzYEO/fvxd1foHPX3ok/ZD8UYe1GEshDtZiHZL4+eefZVKlsJilpSXc3d2xefPmElvEffz4EevWrUO3bt1kdnuEsJo+fTq2bdsmNi3q9evXWLhwIa5duybHzAgrmvZAqqzNmzfD2dlZph/IxXbv3o1Pnz7h119/FY0sF5OkU/PgwQPMmzcPNWrUwPbt2/Hp0ydMnToV3t7eMDc3lzgvb29vHDx4EDdv3sSsWbPQoEEDFBUVISIiAn/99ZfE8YpHar+3ywDL6ODKlSvxzz//wNPTE6ampmJzeyMiIuDm5oZWrVpJvL1bfn4+tmzZglOnTiEnJwdqamqwt7fH/PnzJZrbPXToULH7FBERgZYtW5aIwbqLg6+vr+j///77L3x9fTFixAg0bdoUcXFxOH36NPr374/ly5cz51gWO0jISmlltaX18eNHODs7IyQkBLq6uqhfvz6UlJTw4cMHvHv3Ds2aNcOhQ4dksnUhIZIo7fX+/v179OzZk9faCj5Ua5RPMQ0AyMuNKbfbKi/U+SWEh+nTp+PGjRsy32oqNzcXHMeJilTw4evri759+yIpKQmrVq3Cp0+fsGTJEnTs2FHiWCz70LIsxMrPz8fy5cvh6+sLJSUlaGlpiToyOTk56Ny5M7y9vaXqPEkz987b25upXfFZhR+xtLT8YRuBQFAmI7DyUBZzfos9fPgQoaGhSEhIQEFBATQ1NWFsbIyePXuWyRdbQr4lJCQEwOd1JcULbIHP7/03b97EnTt34OfnVy65UOdXOtT5JYQHCwsLLF++vNRSydJuoF6VJSUlISQkBImJiWIdGUlKQn/pxIkTGDx4cIWa40tkLyMjAxoaGvJOg1RzX54J+7LrJBAIoKenh7Vr1/KupikpFdXG5XI7AJCfF1tut1VeqPNLCA+rV69Gamoqhg8fXmL0qVOnTsxxnj59Cj09PdSqVUvWKYq8efMG796947V38KVLl2BmZiaX1cwsrKys8P79e/Tq1QvDhg2Dubm51HN1i/cOvnDhAuLi4kR7B+/duxdNmkg+2vLlFIivDR06lH+iMnTlyhW8fv1abF52eHg4r0psABAaGorY2JIfmHzvb9u2bdG7d2/Y2tqie/fuMpuPTQgfZTHNR1LU+ZUOdX4J4aG0EV8AEk97MDc3x+bNm0U7VEjL1NQUt27dEntTfvXqFcaMGYPg4GCJ4/Xs2RPr1q2TafW1mzdvwtPTs9Tyo3ymjDx69Ajnz5/HpUuXoKCggCFDhmDo0KFiC8wksX79erG9g/39/eHt7Y309HSJ9g4u9uUUiJycHKSnp0NZWRna2tpSTXsIDw/HsWPHEBsbC11dXYwdOxZGRkYSx1m/fj3++usvCAQC1KhRA5qamggPD0ePHj2wb98+ieMtX74cp06dQr169cS+GEozzeOff/7BhQsXEBgYCBUVFdjY2MDW1pb3c0yINMpymg8rZZXyO8NYkP/tUtGVFXV+CZGj5cuXQ01NDUuWLJFJvNLelJOTk9G3b188fvxY4nhbtmxBUlISvLy8ZJIf8Lk0qLGxcamj5tIUcuA4DhcvXsTKlSuRkZEBY2NjLFmyBCYmJhLFKau9g4vFxMTA09MT1tbWsLGx4RXj9u3bmDFjBnr27InmzZsjKioKN27cwJ49eyReKGlubo4DBw7g7du3CAoKwpYtW+Dl5YWCggJe+2F36NABnp6eom3sZEkoFOLOnTs4f/48rl69Cj09PQwfPhxDhw6l+b+k3OTn58v99UadX+nQVmeEyNHChQsxY8YMbNu2DdOmTeO90K14wZZAIMD+/fvF3piDg4MlmorxJTs7O7i7u2PRokUl8uO7n+XHjx+xePHiEttX8ZWbm4urV68iICAAd+7cwX/+8x/MmjULeXl5cHFxkXjrobLeO7hJkybYuXMnHBwceHd+t27dCg8PD/z666+iY6dOncLmzZsl7vzm5ORAS0sLJiYm2LZtGwBgzJgxsLe359X51dTUhL6+vsTXYyEUCpGbm4usrCzk5+ejoKAAZ86cwdWrV3mNUhPCh4qKClJTUxEZGYmioiIAn798h4eHY+LEieWSA41aSoc6v4TIUfEODCEhISU+vCWZAvDllIbQ0FBRsQEFBQW0atWKeZeCr31ZEMTf31+00EOaXS0GDBgAHx8fzJw5k9f1v7Rw4UJcvXoVNWvWxODBg+Hi4oL//Oc/AD5XMWPdxeFLZbV38Jfy8vKkKtAQFRUFCwsLsWMWFhbYsGGDxLGK94HevXs3CgoK8PfffyM7OxsFBQW8cnNxcYGHhwe2bt0KbW1tXjG+du/ePQQEBODKlStQVVXF4MGD8d///hf6+vpITk5m2l2DEFnx9fWFm5ubWAl5gUAATU3Ncuv8EulQ55cQRrLeDguQrOLV9xw7dgzA52kP+/fvl9lctLLYiqtt27bw9vbG06dP0a1bN7ERVUkXRBUWFmLr1q3o3r272N7BAFC3bl0EBgZKnJ+TkxPy8/OxadMm5OTkwM3NDfb29pg1a5bEsYD/ldsuVlRUhFevXvEejQcAQ0NDHD9+HAsWLBAdO378OK9dM1auXInFixcjKysLTk5OmDx5MjiOw4wZM3jldurUKbx9+xa9e/dGq1atxF6LfF/v06ZNg5WVFTZt2gRzc3OxSnIcx8HFxYVXXEL42LVrF7Zt24aEhAS8efMGixcvhpOTE69FxXwVVsGpCOWJ5vwSwsjR0fGHbQQCgcw6tHzY29vjyJEjUu0TXNa+NUpXEfe9lWbv4GKlfWnS1dXFoEGDeM8bjIiIwNixY/HTTz+hadOmiI6OxsePH3Hs2DH8/PPPUuUbHx+P7Oxs3tULv/clke8ZiE+fPtF2dqTCMDExwbVr15CamoqFCxfC19cXL168wOzZs3l94Sbljzq/hFQAYWFhiI2NRbdu3RAZGVlue0X+SEXdpsvHxwePHz9Gy5YtYWtrK7YHbF5eHqZMmcL7S8iUKVOwbt061KtXT+x4YmIirl27BhsbG4lH1u/evYuLFy8iOTkZOjo6GDhwoNQ7aKSlpcHHxwdxcXFo3Lgxhg4dKrMt6YRCIYRCodwX9XypeI5vrVq1EBoaip9//hmampryTotUQ8XbKjo5OaF79+44f/48Pn78iOHDh+Phw4fyTo8woM4vIXIUHR2NyZMnIzo6GgoKCvDx8YGdnR28vLxgbW3NHMfHxweJiYmiU9V///03Vq5ciY8fP6JPnz5YunQpr9HgstqmKysrC5cuXUJsbCwaN26M/v37M+91vHXrVvz+++/o1KkTXr9+jaysLCxbtky0eCw7OxsdOnTgPSd57NixsLS0RGRkJAwMDDBixAgoKiri119/RWZmJjp27IhVq1Yxxzt+/DjWr18Pc3NzNGjQAPHx8fj777+xbNkyODg48MqxqKioxDQPvlavXo1FixaJdXTv3r0LT09PXLp0iVfMoKAgHDlyRLQN24QJE6Q6Jfz06VNMmzYN7u7uGDhwIIYOHYqkpCQcOHCAd4EUQvi6f/8+ZsyYgcDAQOzduxf+/v4APu9Ws3PnTjlnR5hwhBC5cXR05JYsWcIlJiZyHTt25OLi4riAgABu4MCBzDF27NjBtW/fntu5cyfHcRz37t07zsTEhJszZw7n4+PD2djYcKtXr5ZJvtHR0dyUKVM4Pz8/3jEiIyM5CwsLrmvXrtyIESO4rl27cj169OAiIyOZrm9mZsb9888/HMdxXFFREXfixAnOxMSEW7VqFScUCrmsrCzOwMCAd37Lly/nLCwsuHnz5nH9+vXjnJ2ducLCQq5NmzbcixcvOAsLC4ni9erVi7t48aLYsfPnz3M9e/bknWPXrl251atXc0+fPuUdo5iBgQH36dMnsWPJycmcoaEhr3g+Pj6ciYkJt3btWu7EiRPc2rVrORMTE6leMyNHjuTWr1/PZWVlcRzHcUKhkNuyZQs3atQo3jEJkUZ2djYnFAo5oVDI+fr6csePHxe9PknFR51fQuSoffv2XGJiIsdxnKjzm5iYyJmYmDDH6NWrF3f37l3R74sWLeJGjBjBFRUVcRzHceHh4RJ32L4nNzeXs7W15X39SZMmcR4eHlxBQQHHcRxXWFjIubu7c5MmTWK6vqGhIZeamip27PXr11z//v25SZMmccnJyVJ1fs3MzLi3b99yHMdxmZmZnJGRERcbG8sZGhpyHz58kLhT2K1bNy42NlbsWExMDGdubs47x2vXrnFubm5ct27duL59+3I7d+7koqKiJIoRFxfHxcXFcfr6+tzLly9Fv8fGxnK///4717dvX165DRw4kLt8+bLYsUuXLnEDBgzgFY/jOM7ExIRLTk4WO5aYmMi1b9+ed0xC+IqNjeWePHnCPXnyhIuPj5d3OoQH2u2BEDlq3rw5Ll68iPHjx4uOPX/+HC1atGCOkZGRIap09f79e1y4cAHe3t6iHQbq1q2LzMxMmeUs7TZdjx8/hqenJ5SUPr/9KCoqYvr06cx73hoaGuLIkSNiK/z19PRw6tQpODk5iT2WfPz00094+PAhGjdujCdPnkBJSQl5eXlQV1dHbm4uatSoIVE8BwcHeHp6wtXVFY0aNUJ0dDS8vLwwYcIE3jn26tULvXr1AsdxePz4MYKCgjBt2jRoamri5MmTTDEsLS0hEAggEAjEHnuO41C7dm1s2rSJV27JycklKs0ZGRkhJSWFVzzg8wLBkJAQscIZDx48kNle0YSw+OOPP7Bv3z6kpKSA+/8ZowKBALq6upg3bx4GDRok5wwJK+r8EiJHc+fOxYwZMxAQEIDc3FysX78ewcHB2Lx5M3OMLl26YNu2bfj111+xb98+NG/eHD169ADweSuw/fv3o02bNrzyK4ttuho2bIgHDx6IzWl++PAhc0fGw8MD06ZNg1AoxMKFC0XHNTQ08Ntvv2Hu3Ll4+/Yt7/yWLVsGFxcXuLm5oUaNGjAyMoKrqyuUlJSwZcsWiUvqFs8BvHnzpugYx3G4ffs2Nm7cCIBfWWfg8wevtrY26tevj7p16yI+Pp75ulevXgXHcejTpw98fX1Fi/gUFBSgra0ttp2YJDp27Iht27Zh9erVUFFRQX5+PrZv3y7a05qPGTNmYPHixbh37x6aNm2KmJgY+Pn5Yd26dbxjEiIJHx8frF27FqNHj4alpSUaNGgAgUCA5ORkXLt2DUuWLEGtWrXQs2dPeadKGNCCN0IYFY+U/YikC8GeP3+OU6dOISEhAQ0bNoS9vb1EndWkpCQ4OTkhLCwM2tra2LdvH1q3bo0XL15g+PDhUFdXx/79+3ntIFEW23RdvnwZCxYsgI2Njag0r7+/PzZv3ow+ffowxcjMzMSbN29gbGxc6uURERFSVRnLzMxEZGQkmjVrBoFAgIsXL8LS0hKbNm3CkCFD8MsvvzDHun///g/bSFrW+fnz57h69SquXLmCpKQk9OvXD4MHD+b1paS0ktjSSEhIwPjx45GSkoIGDRogKSkJ9erVw5EjR6Qaqb116xb++OMPxMXFoVGjRhgzZkyJQh+ElBU7OztYWVl9c7/vvXv34ubNm/jzzz/LOTPCB3V+CWHk4+PD1M7W1raMMyldRkYGateuLeqgf/jwAaGhoejQoQO0tLR4xy2Lbbru3buHo0ePinZ7GDdunNQxSzN48GAcOHAAOjo6Mo8tT23btkXPnj0xePBg9OzZU6otyd6+fYuWLVvKMLvP25Jdu3ZNtA1br169KtS2aYRIysTEBD4+Pt+ckhYZGQlbW1s8evSonDMjfFDnlxA5+vDhg2g06+s/Rb6ndAsKCvD+/fsS8Ro1aiRxrLLYpqs8derUCX5+fhLd97J4TmQtIyNDbG9jaSUmJuL06dOircl+/fVXmk9LyBcMDAywefPmb875z8nJwcKFC3lPYSLli+b8EiJHc+fORUREBLp27SqTkbGzZ8/C09MTeXl5omPc/9ed5/OmfOjQIWzatAn9+/cXHbtw4QI2btxYKTq/fMj6OSkLxR1fWRRHCQsLw7hx49C8eXM0a9YMN2/exNGjR/H777+XWLhGSHU2f/78717OMi2OVAzU+SVEjh4/foyTJ0/CwMBAJvG2bNkCe3t7jBw5UiYdt/z8fLRt21bsWLt27VBYWCh17IpK1s9JWSitOIqDg4PExVGAz6PZEydOFCs97O3tjbVr1+LEiROyTp1ZSEgIOnToAAUFBYSEhHyznTSLLwlh9eLFC3mnQGSIOr+E8JSamorIyEgUFRUB+DzCGh4ejokTJzLHaNmyJT58+CCznAoKCjB27Fjo6urKJJ6stumqTB0ZWT8nZcHNzQ0dOnTAsWPHYG1tjdq1a8PLywt79uyRuPP74sULbNmyRezYsGHDcPjwYeYYrq6uWLFiBVRVVeHq6vrNdpJMG3F0dBQtxHN0dCy1Dd8zGoRIKzMzE3fu3EFcXByGDh2K4OBgsa34SMVGnV9CePD19YWbmxuEQiGA/00t0NTUlKjzu2bNGixduhQzZsxA165dpV5xb29vj99++w0rVqyQKk4xWW3TVZk6MrJ+TspCeHg4Nm7cKLaQr1OnTnB3d5c4lp6eHgIDAzF27FjRscDAQIn2mi4LX4600agbqUjCwsIwefJk5OXloaCgABYWFvDw8EBKSgrGjRsn7/QIA1rwRggPffr0weLFi5GQkIA3b95g8eLFcHJyQu/evSWaC/vlqfWv54vx6Qju2LEDp0+fRp06dUp03L48rc2qLLbpKk98FrzJ+jkpC3Z2drCxscH48eNF9zEiIgI7d+7EuXPnJIp1//59TJo0CR06dBBtPffgwQMcOnRIqr15Camqhg0bhu7du8PJyQldunSBn58fXr16BU9PTwQFBck7PcKARn4J4SElJQWmpqZITU3F2bNnoaamhoULF2L27NkSdX5///13meYVEhIiGrF79uyZ6DjfhRgVuWPLwtraGjVr1pToOrJ+TsqCLIqjFDMzM4Ovry9OnDiB2NhYtGzZEm5ubhIX8yCkuoiMjMTu3btFVSoBoHXr1khLS5NjVkQS1PklhAc9PT0cPXoUTk5OSExMRGpqKlRUVPD+/XuJ4jx8+BDGxsZo27atTE6vHzt2TOoYlcnGjRthZ2f3zY7a8uXLJY5ZGTr8FhYWOHPmDE6fPo26detCS0sLhw8f5lXJ79mzZ2jTpo3YlImHDx9i8+bNP1zdTkh1ZGBggCNHjmDRokWiY3fv3q3Qi2SJOJr2QAgP9+/fx4wZMxAYGIi9e/fC398fwOeOU/E8WRbjx4/HmzdvkJqaihYtWqBdu3YwNjZGu3bteJck/nLP1saNG+PXX39FgwYNeMUqC/7+/rC0tCy1s5+dnS3RSO2YMWPw8OFDGBoaYtiwYRg0aBBq164tVX75+fk4ceIEXr9+LZrTDXzuJBY/z1VJ69atERISIvZ8xMTEwMbGRmYb9n/8+BFZWVm89pompKJ5+vQpJkyYADU1NaSnp8PQ0BBRUVE4cOBAid1xSMVEnV9CeMrJyYGqqioAICAgAJmZmbC1tZX4NDsAJCcn4/Llyzh//jweP37Me/HX13u2RkVFITIyskLt2WppaYkjR47gw4cPaN68uWjP2tWrV+PEiRNYtWoVhg8fzhwvKSkJFy5cwIULF/Dy5UtYWVnB1tYW5ubmvKZ7LFmyBM+ePQPHcVBRUUGTJk1w5coVDB06FGvXrpU4Xlno1q0btm/fLpM5uaWVN3737h3s7e2Z5nx/bfr06di2bZtYMYAHDx5g4cKFuHbtmtT5ElIRJCUlwc/PT1SWfsiQIVWukmRVRp1fQuRo1qxZSE1NhaqqKlq0aIGWLVtCT08Penp6vEZrR40aha5du5bYs/Xvv/+W656tX9q6dSt+//135OTkoEaNGli1ahVsbGxgamqKlStX4uDBg/D19eUVOzAwEO7u7sjIyIC2tjY8PDxgZWUlUYxffvkFp0+fxqtXr3Du3Dns2rUL+/fvx+vXr7FhwwZeecna1KlTYWFhgTFjxvCO4ejoCIFAgJCQEJiamkJRURHA5908Xr58icGDB8PNzU3iuKWNJL9//x49e/ZEeHg4c5zvbZn2pYpSdY8QUnnQnF9CeAgMDISVlZWowwAAwcHBOHPmDDZt2sQcJzExEUpKSqhbty7q1asHbW1taGtro27durzyksWerWXt0qVLWLp0KYYMGYL79+/D2dkZPXr0QG5uLrp16wYPDw+J4sXHx+Ovv/5CQEAAoqKi0KNHDwwdOhS5ublwd3eXuPNbVFQEgUCAdu3aYfXq1QCAIUOGYMiQIRLFKUuurq6YPn069PT00KVLF14xOnfuDACizm/xWQyBQIBRo0aJVfVjUbx/M8dxePDggegMCMdxuHnzJi2gI1VG8RfH0lSGBbOEOr+E8DJnzpwSo1tNmzZFYGCgRHHOnj0L4HPFrhs3buDQoUMICwuDoqKiRKNkxSrqnq1fSk9PR6dOnaCiogJTU1MUFhYiNTVV1Fn6cp7tj4waNQqPHz9GmzZtMHLkSAwaNAg//fQTgM8rsnNzcyXOr3v37pg1axZOnjyJGjVq4MyZM8jNzRVb2S1vHh4eUFJSwsSJE2FoaCg21Yb1w7f47IC3tzemTZsm9YLL4v2bBQIBpk2bJjouEAigp6cn8ZQRGtElFVXxF0fg8zqFsLAwPHnyROx9l1RsFefdnJBKpLTZQikpKRJ3IBYtWoQ3b97g7du3UFJSgpGREaZOnYp27drxymvhwoWYNGkSrl27VmLP1opiyJAhmDBhAkxNTfH8+XOoq6vjypUrKCgowMOHD6Gtrc0cy9TUFJ6enqWOKjZv3hwPHz6UOL+VK1di7dq1KCgowKJFi+Di4oK8vDxeBSTKypcfvtKaMmWKTEphFxeiaN26dYk5xIRUJaXtmX7u3DmEhobKIRvCB835JUQClpaWEAgEiI+PR8OGDUWnvjiOQ2JiImbPno3p06czx1u1ahXatWuHtm3byuy08Js3b0R7tjZu3BijRo2qUKecOY6Dr68vwsPDYWBggFatWmHDhg2wt7fHqlWrMHbsWMydO1feaYrk5+ejoKAAtWrVkncqlUJpC+gIqQ4GDx6MgIAAeadBGFDnlxAJ+Pj4gOM4LFu2DO7u7lBTUwPw+dRuy5YtmUdsc3NzcePGDfz7779IT0+HQCCAlpYWjIyMYGFhIZORuMpI0q3OOI7D4cOHYWpqChMTE7i4uEBPTw/Tp08Xm4/N4sWLFwgPD0fLli1hamoqdtn79+9x4sQJzJ49W6KY1VF+fn6ZvH6zsrJw6dIlxMbGQldXFwMGDKAvJEQu4uPjxX4XCoUIDQ3F1q1bcevWLTllRSRBnV9CeJBmdOvly5eYPHky0tPT0bx5c9SuXRscx+HTp0+IjIxE/fr18dtvv6FVq1ZlkHnFERYWhtjYWHTr1g2RkZG8pnps3LgRAQEB2LlzJ4yNjfHHH3/g0KFDsLa2xrx585jjXLhwAQsWLEDt2rXx6dMnLFq0COPHj8eLFy9w5MgRnD9/Ho0aNcLly5clzrE6Sk1NRWRkJIqKigB8/pISHh6OiRMn8ooXFRWFsWPHorCwELq6uoiLi4OysjKOHj2KZs2ayTJ1Qn7IwMBAbMEbx3FQVVWFm5sbRowYIcfMCCvq/BLCw8mTJzF8+HBei6AcHBygq6uLVatWlRjlzMzMhIeHBxITEyvM1mSyFh0djcmTJyM6OhoKCgrw8fGBnZ0dvLy8YG1tLVEsCwsL7N69W2wP46dPn8LZ2Rk3b95kjmNrawsrKys4OTnh2rVrcHV1xX/+8x+EhITAxMQEkyZNQu/evXmXia5OfH194ebmJlq4yHEcBAIBNDU18c8///CKOXnyZOjq6sLd3R1KSkoQCoVYuXIl4uPjceDAAVmmT8gPxcXFif0uEAhQr169anvGrjKiBW+E8DBy5Eje13327Bk2btxY6ul9dXV1uLi4YODAgczxfH19YW1tDSUlpe/ujzt06FAe2cqem5sbOnTogGPHjsHa2hq1a9eGl5cX9uzZI3HnNy8vD5qammLHNDU1Jd7l4d27d7CzswPweV53bm4uNDQ0cPLkSZiYmEgUq7rbtWsXtm3bhoSEBLx58waLFy+Gk5MTevfuzTvm48eP4enpKfqyqaioiOnTp8PGxkZWaRPCTFdXV94pECkpyDsBQiqjN2/eiE7DPnjwAJ07d0anTp1w+/btH163fv36362c9c8//6B+/frMuezYsQN5eXmi/5f2I0nJ5bIWHh6OuXPnilVD6tSpU4l5dCzMzc2xcuVKJCcnA/i848aaNWvQvXt3ieLk5eWJKs0BgIqKCpYtW0YdXx5SUlJgamqKX375BY8fP4aamhoWLlwo1V7TDRs2xIMHD8SOPXz4EA0bNpQ2XUIklpycDFdXVwiFQrx+/Rp2dnawsbFBWFiYvFMjjGjklxAe3N3d0bx5cygqKmL79u2ws7ODQCDAxo0bf9jxmj59Ojw8PHD37l0YGRlBQ0MDHMchIyMDYWFhuHLlClauXMmcy5clYytD+djmzZvj4sWLGD9+vOjY8+fPee1FvGzZMsycORM9evSAiooK8vPzYWxsjPXr10sUh+M4bN68WXTaMjc3F7t27Soxp5u16lh1pqenh6NHj8LJyQmJiYlITU2FiooK3r9/zzumk5MTFixYgHv37om28PP398fmzZtlmDkhbJYtWwaBQACBQIBNmzahefPmUFBQwOrVq3Hq1Cl5p0cY0JxfQngwMTHBxYsXUbduXXTu3BnBwcH4+PEjevfujSdPnvzw+teuXcOpU6fw7NkzfPjwAQCgpaUFQ0NDODg4oEePHmV8D+Tn1q1bmDFjBgwMDPDy5Uv06tULwcHB2Lx5M8zNzSWOx3EcwsLCEB8fj0aNGqFt27YSz80tLtDwPQKBgKo3Mbh//z5mzJiBwMBA7N27F/7+/gAAMzMzqc5A3Lt3D0ePHkVcXBx0dXUxbtw43tXtCJGGqakp/Pz80KhRI5iZmeHmzZvIyspCv3798PjxY3mnRxjQyC8hPGhqaiI6OhqvXr2Cnp4eVFRUEBUVBS0tLabrW1pawtLSsoyzrJgsLCxw5swZnD59GnXr1oWWlhYOHz6MNm3a8IpXWFiI+vXro169egCAhIQEAECjRo2YYxw7dozXbZOSzMzMcOfOHaioqMDV1RVGRkbIzMyEra2tVHGLiopQt25dCIVC1K9fnxYfErlRU1NDZmYmwsLCoKurC3V1dURGRtLe1pUIdX4J4cHe3h4TJkyAQCDA0qVL8fLlS8ydO1e0aEoSoaGhuHDhAuLi4uDm5oaDBw/C1dUVqqqqZZB5xdCmTRusWLFC6jhnz56Fp6enaM4z8L/dBf7991/ecYOCgnDkyBHRnrITJkyQasFWdVO8/zXwuaKftI4fP47169fD3Nwcurq6iI+Px+TJk7Fs2TI4ODhIHZ8QSQwYMADjxo0DAIwbNw5RUVFwdXWttgMalRJHCOHl7t27XEhICMdxHBcdHc3997//5YqKiiSKcfbsWa5NmzbchAkTuLZt23Jv377lbG1tueXLl/PK6dChQ1x+fr7YsTt37nCjRo3iFa8sdO3aVfS4ySLW2rVrubdv33KxsbFiP3z5+PhwJiYm3Nq1a7kTJ05wa9eu5UxMTDg/Pz+Z5FzVZWVlcatWreL+/vtvjuM4btSoUZyrqyuXlZXFO2avXr24ixcvih07f/4817NnT6lyJYSPwsJC7vTp05yvry9XWFjIvX79mtu+fTuXm5sr79QII+r8EiJHvXv35q5cucJxHMd17NiRi4uL48LCwrguXbrwimdgYMB9+vRJ7FhiYiJnaGgoda6yMmXKFO7YsWMyidWpUyepOrqlGThwIHf58mWxY5cuXeIGDBgg09upqpYtW8ZZW1tzERERHMdx3JUrV7hhw4bx/kLHcRzXrVu3Es9zTEwMZ25uLk2qhJBqiqY9EMJDQUEBzp8/j7i4OHBfrRl1cnJijpORkQEDAwOxY8XzGvn4Ohfgc9GH4vmwFYGrqyumT58OPT09qRcs2dvb47fffpPJFIpiycnJYkUzAMDIyAgpKSkyu42q7Nq1azh27Bj09PQAAL1790bz5s0xbtw43s+Tg4MDPD094erqikaNGiE6OhpeXl6YMGGCDDMnhN2XZbwjIiIgFAp5r1sg5Y86v4TwMH/+fFy/fh2GhoZQVlYWHZd0EU6XLl3g5uYm2jqnsLAQx44dQ9euXSWKU1xuUyAQoFOnTmKXKSoqSrR1Wlnz8PCAkpISJk6cCENDQ7FiH5LupqCsrIygoCA8fPgQXbt2FVtwIsmXkC917NgR27Ztw+rVq0Xbp23fvh0dO3bkFa+6UVBQKPHlje+XuWLFu0R8WbWP4zjcvn0bGzduBACp5ngTIomgoCAsWLAA9+/fh5+fH9zd3SEQCLBgwQJMmjRJ3ukRBrTVGSE8tG/fHvv37y/R0ZRUSkoKZsyYgfDwcACAkpISWrdujT179kg0Wnv//n1wHIfx48djz549og6lgoICmjVrJlHRjLLm7e39zcsk7bB+a4syabYlS0hIwPjx45GSkoIGDRogKSkJ9erVw5EjR6ioAoOVK1fiyZMncHd3R9OmTRETE4M1a9agXbt2cHd35xXze0VhipmZmfGKTYikBgwYAEdHR4waNQpDhgzBzJkzIRAIsG7dOly/fl3e6REG1PklhIeBAwdi48aNMDQ0lDoW9//71MbFxaFRo0Zo164d722cDAwMEBoaSlvuSCk/Px/Xrl1DXFwcGjdujF69eolOcZLvy87OxtKlS3Hp0iXR67h///5Yu3at2C4QhFRWxsbGCAoKgpqaGnr06IHQ0FAkJyejb9++TPu8E/mjzi8hPNy7dw8bN26Ep6enVB3gu3fv4vLlyygoKChx2bp16ySOd/v2bXTr1g0KCtWncnlmZibu3LmDuLg4DB06FMHBwRg4cKDM4ufl5VXpbefKSlpamqggRZ06deSdDiEyY21tjSFDhiA/Px+hoaE4fPgwAgICsHfvXpw/f17e6REG1PklhAdLS0t8+PABOTk50NDQEBtpvXr1KnMcMzMz6Ovro3HjxiUu49P5/Zbw8PASi7iqgrCwMEyePBl5eXkoKCiAr68vHBwc4OzsLNqHU1KpqalYtmwZRowYASsrKwwePBh16tTBli1bULduXRnfA0JIZRMUFIR58+ZBWVkZu3btgrKyMsaOHQsvLy8MHjxY3ukRBtT5JYQHHx+fb14mSSWr8ePHw9nZGR06dJBFWggPD4erqyvevn2LoqIiscuq4oKgYcOGoXv37nByckKXLl3g5+eHV69ewdPTE0FBQbxizp49GxkZGfD09ESTJk3w9OlTeHt7o3bt2ti8ebOM7wEhpDLKzs6GkpISVFRU8PHjR3z8+BFNmzaVd1qEEe32QAgP0pZqLdazZ0+MHz8ehoaGJeaU8lmwtXLlSvTo0QPt27dHRkYGbG1tsXr1aowfP14m+VY0kZGR2L17N5SU/vdW1rp1a6SlpfGOGRwcjLNnz4pG44sXag0fPlzqfAkhVcOXu9RoampCU1NTjtkQSVHnlxA52rt3L/r27YsWLVrIJN6rV6+wd+9exMTEYMOGDejRoweUlJSwdetWjB49Wia3UZEYGBjgyJEjWLRokejY3bt3S+ydLImaNWvi/fv3YlNR3r9/T4u1vsPKygr+/v6oVasWLC0tv7lgU5IpQYQQUlao80sII19fX1hbW0NJSQm+vr7fbDd06FDmmL1794aFhQX69u0rfYIA6tWrh0ePHqF79+548+YNCgsL8fPPP+PNmzcyiV/RLF68GBMmTEBAQACys7Mxd+5cREVF4cCBA7xjDh06FAsWLMDcuXNFW3Vt374ddnZ2Msy8anFychItCnR2dpZzNoTIXlm8/xP5oTm/hDCytLREQECAaHSrNAKBQKLRrZ49eyIpKQl169YtsaMAn1GyP//8E56enrh79y5cXV2RnZ0NjuOQm5uLM2fOSByvMkhKSoKfnx8SEhLQsGFDDBkyBDo6OrzjFRYWYuvWrThx4gRycnKgpqaG0aNHY968eVBUVJRh5oSQyqIs3v+J/FDnlxA5ktXCuS+Fhoaibdu2+PTpE7Zu3YrMzEw4OzujVatWfNOsttLS0mibLkIIqWKo80uInCUmJuL06dOIjY2Frq4ufv31V6okxsjR0fGb80v5VngjhBBStVWfnfAJqYDCwsIwcOBA3LhxAwUFBbh58yYGDRokKnfMx+XLlxEREQEA8PLy+u78tMquc+fOMDMzg5mZGYyMjMBxHB4/fox27drJOzVCCCEVFC14I0SO1q1bh4kTJ8LJyUl0zNvbG2vXrsWJEyckjnfo0CF4e3tj165dAAAVFRWsXbsWHz58qJLbnX35uBU7d+4cQkND5ZANIYSQyoCmPRAiR6amprhw4QIaNGggOpaQkABra2s8ePBA4niWlpZYs2YNunTpIjr2zz//wM3NjXfRh8po8ODBCAgIYG7funVrhISEQF1dHQYGBt+cSlEVC4XIQkhICFO7Tp06lXEmhBDyYzTyS4gc6enpITAwEGPHjhUdCwwM5L3vb0ZGRonrNm3aFB8/fpQqz4oqPj5e7HehUIjQ0FCJ7+/Ro0dFm9bTXGHJOTo6/rCNQCCgLw+EkAqBRn4JkaP79+9j0qRJ6NChA5o3b47IyEg8fPgQhw4dQseOHSWON336dGhpaWHlypVQUVFBQUEBPDw8kJaWhn379pXBPZCvr0dpOY6Dqqoq3NzcMGLECDlmRgghpKKizi8hcvbmzRucOHECcXFxaNy4MRwcHKCnp8crVkxMDCZMmID09HTo6OggOTkZWlpaOHToEJo0aSLjzOUvLi5O7HeBQIB69eqVKBVNCCGEFKPOLyFyFBMTgz179iAuLg5FRUVio5h8T7/n5ubi+vXriI+PR6NGjdCrVy/UqFFDVilXSQsWLMDEiRPRpk0bBAYGwsrKigpaEEJIFUWdX0LkaNiwYcjKykLfvn1LjFaWtpMBEWdpafnNxWnFWCoutWvXDkFBQdDW1hZb/EYIIaTqoQVvhMjRmzdv4Ofnh2bNmsk7lUqpe/fuuHjxIuzt7aGrq4uoqCicPXsWQ4cORevWrZnjqKmpISMjA9ra2qDxAOnk5+dj165duHjxIpKTk6GjowNra2tMmzaNpqMQQioE6vwSIkdt27ZFREQEdX55evz4Mby9vWFmZiY6ZmFhgY0bN2Lp0qXMcaytrTFs2DDUq1cPAoEANjY2pY4os4wiV3dr167FrVu34OjoCB0dHcTFxeHEiRP48OED3N3d5Z0eIYRQ55eQ8vbl9lzOzs5wd3dHXFwcunbtitq1a4sua9SoEVM8V1dXrFixAqqqqnB1df1mu3Xr1vFPuoKKi4tDvXr1xI5pa2sjNjZWojjLli2DhYUFUlNTsWzZMkyePBlqamqyTLXauHjxIg4ePAgjIyPRsc6dO2PKlCnU+SWEVAjU+SWknH09DgJDMgAAB85JREFUT5XjOHh5eQH4vFsBx3G0Jyqjbt26YcGCBZg5c6ZolHHfvn0wNzeXKI6CggJ69OgBAFi6dClsbGxozi9PP/30E5SUxD9aFBUVUadOHTllRAgh4mjBGyHl7Ovtub5FV1e3jDOp/NLT07FixQpcvXoVhYWFUFJSQr9+/eDh4QFNTU1eMU+ePInhw4eX6MARNl5eXggKCsLUqVPRqFEjREdH4+DBg7C2tka3bt0AUKU3Qoh8UeeXEFLpFRUVIT09HVpaWlBQUJB3OtWagYHBdy+nsxqEEHmjzi8hpFILDQ0tdY7v0KFDyz8ZQgghFR51fgmp5IKCgtC6detqOU1i+fLlOHXqVImqbgKBgHZmkKP8/HyEhYUhOTkZDRo0QNu2bWkaCSGkwqDOLyGVXOfOnXH69Gk0a9YMpqamuHXrVrVZrNWhQwd4enpi4MCB8k6F/L+IiAjMnDkTcXFxUFVVRV5eHpo2bYrdu3ejVatW8k6PEEJAk+MIqeRyc3NFW6RlZ2fLOZvypampCX19fXmnQb6wYsUKmJmZ4Z9//sGTJ09w9+5dmJiY0DZnhJAKg0Z+CankRo0aBQ0NDRgZGcHb2xtTp04ttZJWVSyX/Ndff+HPP//E1q1boa2tLe90CD6Pxv/1119o2LCh6Fh8fDxsbGwQGhoqx8wIIeQzmoRFSCW3Zs0abNu2DcHBwRAIBAgNDYWioqJYm9KqlVUFp06dwtu3b9G7d2+0atVKbLrH77//LsfMqi8TExPcuXMHI0aMEB27efMmOnbsKMesCCHkf2jkl5AqxMDAAKGhodVmzq+3t/c3L6uKI92VwbRp03Dr1i0YGxtDV1cXMTExCAsLg5WVlWh6TlWsNkgIqTxo5JeQKsTY2LjEqG9VRh3ciqdOnTpi28zp6elBT09PfgkRQshXaOSXEEKITD1//hyvX79GUVERgM8lvMPDw2nRGyGkQqCRX0IIITJz8OBBbN++HUpKSlBWVoaysjJSU1N/WPmNEELKC3V+CSGVSkhICDp06AAFBQWEhIR8s12nTp3KMStS7NixYzh8+DCioqIQEhKCtWvXYtGiRWjevLm8UyOEEAA07YGQSq+6dQa/XNT3rdFEgUCAf//9t5wzIwDQvn17BAUF4dOnT5g1axbOnz+Pt2/fYtKkSbh+/bq80yOEEBr5JaSyc3R0FHUGHR0dS21TlTqDL168KPX/pGIwMjLCxo0bsWrVKnz8+BFv375FZmYmMjIy5J0aIYQAoM4vIZUedQZJReLm5gYnJyd8+vQJY8aMgbW1NRQUFGBnZyfv1AghBABNeyCEEFKGHjx4gMzMTHTv3h0KCgryTocQQqjzSwghhBBCqg/6Gk4IIYQQQqoN6vwSUoU8ffoUWVlZ8k6DEEIIqbBo2gMhVYi5uTk2b96Mzp07yzuVMuPq6srUbt26dWWcCSGEkMqIRn4JqUKsrKxoL1VCCCHkO2jkl5AqJDMzEzNmzECHDh0wbdo0qKmpyTslQgghpEKhzi8hVciXFc8EAoHYZVWlyAUhhBAiDSpyQUgV8vvvv8s7BUIIIaRCo5FfQkilFxYWhtjYWHTr1g2RkZFo166dvFMihBBSQdGCN0KqoLCwMFy8eBEZGRl4+vSpvNMpM9HR0ejbty9GjBiB+fPnIyEhAQ4ODvjrr7/knRohhJAKijq/hFQh1a0z6Obmhg4dOuDmzZuoVasWateuDS8vL+zZs0feqRFCCKmgqPNLSBVS3TqD4eHhmDt3LnR0dETHOnXqhPj4eDlmRQghpCKjzi8hVUh16ww2b94cFy9eFDv2/PlztGjRQk4ZEUIIqeio80tIFVLdOoNz587Fxo0bMWzYMOTm5mL9+vVYsmQJXFxc5J0aIYSQCop2eyCkCrl16xZmzJgBAwMDvHz5Er169UJwcDA2b94Mc3NzeadXJv7991+cOnUK8fHxaNSoEX799Ve0adNG3mkRQgipoKjzS0gV8++//+LkyZNISEhAw4YNYW9vX6U6g97e3kztnJycyjgTQgghlRF1fgmpQmbPng0bGxv06NEDysrK8k6nTDg6Oor+X1BQgMePH6NevXrQ1dVFQkICkpOTYWxsjFOnTskxS0IIIRUVdX4JqUK8vLxw7do1fPjwAf369cPgwYPRqVMneadVZubPn4+GDRti3rx5UFRUBMdx2LFjB969e4dt27bJOz1CCCEVEHV+CamCXr16hWvXriEoKAipqamwtraukovA2rdvjwsXLqBhw4aiY4mJiRg8eDBCQkLkmBkhhJCKinZ7IKQK+vnnnzFt2jSsWrUKXbp0wW+//SbvlMpE06ZNceLECQiFQgAAx3E4deoUGjRoIOfMCCGEVFQ08ktIFVJUVISQkBAEBQXh6tWrUFFRweDBg2FjY4MmTZrIOz2ZCw4OxqxZsyAQCKCjo4OUlBQUFhbC29sbXbp0kXd6hBBCKiDq/BJShXTu3BlKSkoYMGAAbGxs0K5dO3mnVObS09Nx8+ZNpKSkoH79+jA3N0e9evXknRYhhJAKijq/hFQhN2/ehLm5ORQVFeWdCiGEEFIhUeeXEEIIIYRUG7TgjRBCCCGEVBvU+SWEEEIIIdUGdX4JIYQQQki1QZ1fQgghhBBSbVDnlxBCCCGEVBvU+SWEEEIIIdUGdX4JIYQQQki18X9o8pOosG9aIgAAAABJRU5ErkJggg=="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_numeric = train[numerical_fea]\n",
    "correlation = data_numeric.corr()\n",
    "\n",
    "f , ax = plt.subplots(figsize = (7, 7))\n",
    "plt.title('Correlation of Numeric Features with Price',y=1,size=16)\n",
    "sns.heatmap(correlation,square = True,  vmax=0.8)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:49.925120800Z",
     "start_time": "2024-09-26T13:41:47.670204Z"
    }
   },
   "id": "6380db5f010a5bec",
   "execution_count": 392
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import warnings\n",
    "import os\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\"\"\"\n",
    "sns 相关设置\n",
    "@return:\n",
    "\"\"\"\n",
    "# 声明使用 Seaborn 样式\n",
    "sns.set()\n",
    "# 有五种seaborn的绘图风格，它们分别是：darkgrid, whitegrid, dark, white, ticks。默认的主题是darkgrid。\n",
    "sns.set_style(\"whitegrid\")\n",
    "# 有四个预置的环境，按大小从小到大排列分别为：paper, notebook, talk, poster。其中，notebook是默认的。\n",
    "sns.set_context('talk')\n",
    "# 中文字体设置-黑体\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "# 解决保存图像是负号'-'显示为方块的问题\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "# 解决Seaborn中文显示问题并调整字体大小\n",
    "sns.set(font='SimHei')"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:49.936437300Z",
     "start_time": "2024-09-26T13:41:49.925120800Z"
    }
   },
   "id": "3f8e533c5e674a88",
   "execution_count": 393
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                             int64\nloanAmnt                     float64\nterm                           int64\ninterestRate                 float64\ninstallment                  float64\ngrade                         object\nsubGrade                      object\nemploymentTitle              float64\nemploymentLength             float64\nhomeOwnership                  int64\nannualIncome                 float64\nverificationStatus             int64\nissueDate             datetime64[ns]\nisDefault                      int64\npurpose                        int64\npostCode                     float64\nregionCode                     int64\ndti                          float64\ndelinquency_2years           float64\nficoRangeLow                 float64\nficoRangeHigh                float64\nopenAcc                      float64\npubRec                       float64\npubRecBankruptcies           float64\nrevolBal                     float64\nrevolUtil                    float64\ntotalAcc                     float64\ninitialListStatus              int64\napplicationType                int64\nearliesCreditLine              int64\ntitle                        float64\npolicyCode                   float64\nn0                           float64\nn1                           float64\nn2                           float64\nn3                           float64\nn4                           float64\nn5                           float64\nn6                           float64\nn7                           float64\nn8                           float64\nn9                           float64\nn10                          float64\nn11                          float64\nn12                          float64\nn13                          float64\nn14                          float64\nissueDateDT                    int64\ndtype: object"
     },
     "execution_count": 394,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.dtypes"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:49.939677600Z",
     "start_time": "2024-09-26T13:41:49.932349300Z"
    }
   },
   "id": "c49e56646c253304",
   "execution_count": 394
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 800000 entries, 0 to 799999\n",
      "Data columns (total 48 columns):\n",
      " #   Column              Non-Null Count   Dtype         \n",
      "---  ------              --------------   -----         \n",
      " 0   id                  800000 non-null  int64         \n",
      " 1   loanAmnt            800000 non-null  float64       \n",
      " 2   term                800000 non-null  int64         \n",
      " 3   interestRate        800000 non-null  float64       \n",
      " 4   installment         800000 non-null  float64       \n",
      " 5   grade               800000 non-null  object        \n",
      " 6   subGrade            800000 non-null  object        \n",
      " 7   employmentTitle     800000 non-null  float64       \n",
      " 8   employmentLength    753201 non-null  float64       \n",
      " 9   homeOwnership       800000 non-null  int64         \n",
      " 10  annualIncome        800000 non-null  float64       \n",
      " 11  verificationStatus  800000 non-null  int64         \n",
      " 12  issueDate           800000 non-null  datetime64[ns]\n",
      " 13  isDefault           800000 non-null  int64         \n",
      " 14  purpose             800000 non-null  int64         \n",
      " 15  postCode            800000 non-null  float64       \n",
      " 16  regionCode          800000 non-null  int64         \n",
      " 17  dti                 800000 non-null  float64       \n",
      " 18  delinquency_2years  800000 non-null  float64       \n",
      " 19  ficoRangeLow        800000 non-null  float64       \n",
      " 20  ficoRangeHigh       800000 non-null  float64       \n",
      " 21  openAcc             800000 non-null  float64       \n",
      " 22  pubRec              800000 non-null  float64       \n",
      " 23  pubRecBankruptcies  800000 non-null  float64       \n",
      " 24  revolBal            800000 non-null  float64       \n",
      " 25  revolUtil           800000 non-null  float64       \n",
      " 26  totalAcc            800000 non-null  float64       \n",
      " 27  initialListStatus   800000 non-null  int64         \n",
      " 28  applicationType     800000 non-null  int64         \n",
      " 29  earliesCreditLine   800000 non-null  int64         \n",
      " 30  title               800000 non-null  float64       \n",
      " 31  policyCode          800000 non-null  float64       \n",
      " 32  n0                  800000 non-null  float64       \n",
      " 33  n1                  800000 non-null  float64       \n",
      " 34  n2                  800000 non-null  float64       \n",
      " 35  n3                  800000 non-null  float64       \n",
      " 36  n4                  800000 non-null  float64       \n",
      " 37  n5                  800000 non-null  float64       \n",
      " 38  n6                  800000 non-null  float64       \n",
      " 39  n7                  800000 non-null  float64       \n",
      " 40  n8                  800000 non-null  float64       \n",
      " 41  n9                  800000 non-null  float64       \n",
      " 42  n10                 800000 non-null  float64       \n",
      " 43  n11                 800000 non-null  float64       \n",
      " 44  n12                 800000 non-null  float64       \n",
      " 45  n13                 800000 non-null  float64       \n",
      " 46  n14                 800000 non-null  float64       \n",
      " 47  issueDateDT         800000 non-null  int64         \n",
      "dtypes: datetime64[ns](1), float64(34), int64(11), object(2)\n",
      "memory usage: 293.0+ MB\n"
     ]
    }
   ],
   "source": [
    "# 读取数据\n",
    "# data = pd.read_csv('train.csv')\n",
    "# data = reduce_mem_usage(data)\n",
    "# data.head(5)\n",
    "train.info()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.036187500Z",
     "start_time": "2024-09-26T13:41:49.938576300Z"
    }
   },
   "id": "2fdf2e783a968c77",
   "execution_count": 395
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "id                        0\nloanAmnt                  0\nterm                      0\ninterestRate              0\ninstallment               0\ngrade                     0\nsubGrade                  0\nemploymentTitle           0\nemploymentLength      46799\nhomeOwnership             0\nannualIncome              0\nverificationStatus        0\nissueDate                 0\nisDefault                 0\npurpose                   0\npostCode                  0\nregionCode                0\ndti                       0\ndelinquency_2years        0\nficoRangeLow              0\nficoRangeHigh             0\nopenAcc                   0\npubRec                    0\npubRecBankruptcies        0\nrevolBal                  0\nrevolUtil                 0\ntotalAcc                  0\ninitialListStatus         0\napplicationType           0\nearliesCreditLine         0\ntitle                     0\npolicyCode                0\nn0                        0\nn1                        0\nn2                        0\nn3                        0\nn4                        0\nn5                        0\nn6                        0\nn7                        0\nn8                        0\nn9                        0\nn10                       0\nn11                       0\nn12                       0\nn13                       0\nn14                       0\nissueDateDT               0\ndtype: int64"
     },
     "execution_count": 396,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.isnull().sum()"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.120555700Z",
     "start_time": "2024-09-26T13:41:50.035103700Z"
    }
   },
   "id": "8be060592a1192b3",
   "execution_count": 396
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# import datetime\n",
    "# #转化成时间格式\n",
    "# for train in [train, testA]:\n",
    "#     train['issueDate'] = pd.to_datetime(train['issueDate'],format='%Y-%m-%d')\n",
    "#     startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')\n",
    "#     #构造时间特征\n",
    "#     train['issueDateDT'] = train['issueDate'].apply(lambda x: x-startdate).dt.days"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.125312300Z",
     "start_time": "2024-09-26T13:41:50.121741500Z"
    }
   },
   "id": "32ce8ec6fdd21652",
   "execution_count": 397
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "# 特征转换\n",
    "train['subGrade'] = train['subGrade'].map({'A1':11,'B1':21,'C1':31,'D1':41,'E1':51,'F1':61,'G1':71,\n",
    "                     'A2':12,'B2':22,'C2':32,'D2':42,'E2':52,'F2':62,'G2':72,\n",
    "                     'A3':13,'B3':23,'C3':33,'D3':43,'E3':53,'F3':63,'G3':73,\n",
    "                     'A4':14,'B4':24,'C4':34,'D4':44,'E4':54,'F4':64,'G4':74,\n",
    "                     'A5':15,'B5':25,'C5':35,'D5':45,'E5':55,'F5':65,'G5':75})"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.167303100Z",
     "start_time": "2024-09-26T13:41:50.125312300Z"
    }
   },
   "id": "f694042d0017df24",
   "execution_count": 398
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "X = train.drop(['id','isDefault','grade','issueDate'],axis=1)\n",
    "y = train['isDefault']"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.265000900Z",
     "start_time": "2024-09-26T13:41:50.165111600Z"
    }
   },
   "id": "f246ac61545094e1",
   "execution_count": 399
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.580156900Z",
     "start_time": "2024-09-26T13:41:50.258598300Z"
    }
   },
   "id": "56508b94382a0b09",
   "execution_count": 400
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [
    "model_lgb = lgb.LGBMClassifier(learning_rate=1,n_estimators=581,num_leaves=31,max_depth=20)"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:50.581266Z",
     "start_time": "2024-09-26T13:41:50.573514900Z"
    }
   },
   "id": "70a355bfb7632425",
   "execution_count": 401
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[LightGBM] [Info] Number of positive: 107104, number of negative: 428896\n",
      "[LightGBM] [Info] Auto-choosing row-wise multi-threading, the overhead of testing was 0.017612 seconds.\n",
      "You can set `force_row_wise=true` to remove the overhead.\n",
      "And if memory is not enough, you can set `force_col_wise=true`.\n",
      "[LightGBM] [Info] Total Bins 3736\n",
      "[LightGBM] [Info] Number of data points in the train set: 536000, number of used features: 43\n",
      "[LightGBM] [Info] [binary:BoostFromScore]: pavg=0.199821 -> initscore=-1.387414\n",
      "[LightGBM] [Info] Start training from score -1.387414\n"
     ]
    },
    {
     "data": {
      "text/plain": "array([1, 0, 0, ..., 1, 0, 0], dtype=int64)"
     },
     "execution_count": 402,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model_lgb.fit(X_train,y_train)\n",
    "y_pred = model_lgb.predict(X_test)\n",
    "y_pred"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:55.227194100Z",
     "start_time": "2024-09-26T13:41:50.576989600Z"
    }
   },
   "id": "9f0316f50915126b",
   "execution_count": 402
  },
  {
   "cell_type": "code",
   "outputs": [
    {
     "data": {
      "text/plain": "0.5528671964514515"
     },
     "execution_count": 403,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import metrics as ms\n",
    "\n",
    "auc = ms.roc_auc_score(y_test, y_pred)\n",
    "auc"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:55.270255500Z",
     "start_time": "2024-09-26T13:41:55.217160100Z"
    }
   },
   "id": "fe2175806156f1b5",
   "execution_count": 403
  },
  {
   "cell_type": "code",
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-09-26T13:41:55.272356Z",
     "start_time": "2024-09-26T13:41:55.266585700Z"
    }
   },
   "id": "54769aa19e3921ab",
   "execution_count": 403
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
